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

发布于 2022-09-01 17:37:31 字数 152 浏览 16 评论 0

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

傲鸠 2022-09-08 17:37:32

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

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

万劫不复 2022-09-08 17:37:32

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

月寒剑心 2022-09-08 17:37:32

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'    
}
沉睡月亮 2022-09-08 17:37:32

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

享受孤独 2022-09-08 17:37:31
  • json传输是带类型的,你说的传统的POSTContent-Type:application/x-www-form-urlencoded,就表示虽然也按键/值传递了,但确实字符串,本来数据该有的类型被忽略了。
  • json类型的数据可以比较好的支持嵌套的数据格式,这种数据格式在后端可以和文档数据库(比如mongodb)的存储结构直接对应;在前端可以和js的数据对象直接对应。

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

长发绾君心 2022-09-08 17:37:31

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

慢慢从新开始 2022-09-08 17:37:31

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

飞烟轻若梦 2022-09-08 17:37:31

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

盗心人 2022-09-08 17:37:31

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

短叹 2022-09-08 17:37:31

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

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

灰色世界里的红玫瑰 2022-09-08 17:37:31

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文