x-www-form-urlencoded Vs json HTTP POST

14 php forms json curl content-type

这很难决定,
目前我正在发送数据为x-www-form-urlencoded with php lib curl with

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($this->arguments));
Run Code Online (Sandbox Code Playgroud)

要么

curl_setopt($curl, CURLOPT_POSTFIELDS, $this->arguments);
Run Code Online (Sandbox Code Playgroud)

第一个问题:第二个似乎是内容长度较大,第一个解决方案可能更好?

它对于平面消息很实用,例如:

{
    "name": "John",
    "token": "2121232145",
    "code": "7",
    "data": "Hello"
}
Run Code Online (Sandbox Code Playgroud)

但是我也可以有一个代表一个对象的数据字段,在这种情况下我正在考虑它,但这样做(url编码一个Json)是非常冗长和丑陋的消息,

另一方面,我尝试将其作为application/json内容类型发送

curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($this->arguments));
Run Code Online (Sandbox Code Playgroud)

对于小消息,内容长度更大,但是使用嵌入的json,它显然更好

但x-www-form-urlencoded也接近我需要发送的表单数据,除非嵌入了json

根据内容类型,拥有2个不同的servlet解析方法并不优雅,那么还有另一种选择吗?

pin*_*ain 13

在这里,您可以阅读有关格式的类似讨论

如果编码数据的结构保证是名称 - 值对的平面列表,则x-www-form-urlencoded似乎就足够了.如果结构可能(任意)复杂(例如嵌套列表或关联数组),那么肯定使用JSON.

至于我,我是KISS娴熟的.在您的情况下JSON/XML /无论是时间,内存和CPU周期的额外成本.x-www-form-urlencoded数据结合了可读性和紧凑性,所以我敢打赌它是你的选择.


edi*_*igu 10

x-www-form-urlencoded和JSON是不同的东西.虽然x-www-form-urlencoded只是用于将表单提交给服务器的默认内容类型,但JSON是基于文本和人类可读的格式(标准),用于通过网络连接序列化和发送结构化数据.你不应该比较它们.

第二个似乎是更大的内容长度,第一个解决方案可能更好?

不,没有标有"更好"的解决方案.就像pinepain所说,它实际上取决于你发送什么样的数据以及如何解析/处理它.JSON非常适合发送带有请求的附加数据.

不要考虑内容长度.考虑要发送和处理的数据和数据结构.如果您只想在请求之间发送和处理结构化数据,并且数据大小各不相同,只需使用JSON即可.它是为此而建的.

两种方法之间的内容长度差异不会成为问题的一部分,因为您的应用不是Facebook,Twitter或谷歌怪物.过早优化是万恶之源.

  • 我在这里读到的是:"过早的优化是万恶之源.与JSON一起去吧." 这没用.OP显然在询问两种解决方案之间的差异.此外,谁知道这是不成熟的呢?OP可能已经在项目的最后寻找易于实现的优化选项. (9认同)