首页 > 为什么接口设计都不用普通 POST ?

为什么接口设计都不用普通 POST ?

现在很多新的接口设计出来以后,POST 发送的数据都是 json 而不是浏览器中常见的 key=value&key=value 键值对格式。

json 格式的优缺点我还是比较熟悉的,但是在这里键值对格式同样能解决问题。

那么请问为什么这样设计呢?


最简单地答案就是key value的方式无法表达嵌套数据。并且对用户不友好,虽然post的数据抓包也能看到,但99%的用户都不会去看也不想去看。而且json是js的内置格式,方便


因为大部分后端框架提供的json这个更加易于操作的数据格式


你用过node 就懂了,json太好用了


浏览器中的key=value&key=value是拼接在url上然后传递给server的,别说用的是POST请求,其实和GET没啥区别。虽然都能解决问题,但有优劣之分。
1.用KV连接URL,使得URL比较丑陋。
2.用KV连接URL,如果有敏感信息,存在安全问题。
3.用KV连接URL,长度有限制。
如果用JSON,可以使用request body发送数据,就回避了第一点第三点,第二点相对来说要好点。
JSON格式的数据现在比较通用,各种语言支持性都比较好。


但是在这里键值对格式同样能解决问题。

一个能快速并直接转化为对象,数组。另外一个不能,或者说你必须知道它是数组还是对象,才能转化。


其实这个是分情况的。
如果一个注册,就填写手机号、密码、验证码,这自然用json传输和x-www-form-urlencoded传输没什么两样。

如果我需要传一个list,json的优势就体现出来了。
如果我要传一个复杂对象,一级套一级,自然用json更合适。因为如果用x-www-form-urlencoded我必须一级级展开拼成key value对,服务器后端再去一个个接收拼成对象。
如果是json呢,如果我后端是springmvc的话(打个比方,其他也一样)直接用那个对象接收就OK了,还可以使用注解等等,比如@NotNull 自动做校验。


采用Content-Type:application/x-www-form-urlencoded势必要增加工作量,譬如:数据转型,类型校验等等


部分反对一个的答案
post的优点是可以随便加东西 毕竟没get的长度限制
至于敏感信息 是对于扔收藏夹的 对于抓包没有任何意义
然后呢 就是json这东西可以无限复杂 反正来回序列化就是了
最后一点 无论get/post 数据转型、类型校验都是必不可少的,永远不要相信用户的输入


json的结构可以很复杂,你的键值对的最多只能表示一维关系,而json可以表示多维关系,比如嵌套关系等等。


json的表现能力比key value格式的更强。


x-www-form-urlencodedjson都没有本质区别,那个简单按照那个来。

一般都是先encode,传输,再decode。对于绝大多数语言,json都有encodedecode的库活包。

x-www-form-urlencoded传输需要注意urlencode,实际上,很多开发不清楚细节的情况下,很容易忽视这个,比如要传输一个带特殊字符的password='23af?hello=wrold&bor=far'。忘记urlencode就会是这样:

password=23af?hello=wrold&bor=far

urlencode才能正确传输,大概是这样:

password=23af%3Fhello%3Dwrold%26bor%3Dfar

json则是这样

{
    'password': '23af?hello=wrold&bor=far'    
}
【热门文章】
【热门文章】