疑问
我们看到,现在的很多开放接口已经抛弃了POST方法来传输数据,采用JSON方式基本上已经在业界达成共识了。那,这背后的原因是什么呢?
今天,江边望海来帮助大家整理一下。
1.json带类型
json传输是带类型的,你说的传统的POST是Content-Type:application/x-www-form-urlencoded,就表示虽然也按键/值传递了,但确实字符串,本来数据该有的类型被忽略了。
采用Content-Type:application/x-www-form-urlencoded势必要增加工作量,譬如:数据转型,类型校验等等
2.支持嵌套的数据格式
json类型的数据可以比较好的支持嵌套的数据格式,这种数据格式在后端可以和文档数据库(比如mongodb)的存储结构直接对应;在前端可以和js的数据对象直接对应。
打个比方,做一个简单的用户注册功能吧,包含了三个字段,用户名(string),密码(string),年龄(number)。如果使用Content-Type:application/x-www-form-urlencoded的传统方式,那么所有字段都将按照string传到服务器,那server端是不是就要多做一次数据转型?或者说,我们期望的数据类型,是不是被忽略了!?
3.安全
浏览器中的key=value&key=value是拼接在url上然后传递给server的,别说用的是POST请求,其实和GET没啥区别。虽然都能解决问题,但有优劣之分。
1.用KV连接URL,使得URL比较丑陋。
2.用KV连接URL,如果有敏感信息,存在安全问题。
3.用KV连接URL,长度有限制。
如果用JSON,可以使用request body发送数据,就回避了第一点第三点,第二点相对来说要好点。
JSON格式的数据现在比较通用,各种语言支持性都比较好。
4.后端
现在的接口开发,后端除了可以使用php以外,还可以使用nodejs、mongodb等,天然的支持json格式,可以少一些转换。
参考链接:https://segmentfault.com/q/1010000003015987