Php x-www-form-urlencoded Vs json HTTP POST

Php x-www-form-urlencoded Vs json HTTP POST,php,json,forms,curl,content-type,Php,Json,Forms,Curl,Content Type,很难决定, 目前,我正在以x-www-form-urlencoded的形式发送数据,使用php lib curl和 curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($this->arguments)); 或 第一个问题:第二个问题的内容长度似乎更大,第一个解决方案可能更好 它适用于平面消息,如: { "name": "John", "token": "2121232145", "code": "7",

很难决定,
目前,我正在以x-www-form-urlencoded的形式发送数据,使用php lib curl和

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($this->arguments));

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

它适用于平面消息,如:

{
    "name": "John",
    "token": "2121232145",
    "code": "7",
    "data": "Hello"
}
但我也可以有一个表示对象的数据字段,在本例中,我对它进行了编码,但这样做(url编码Json)是非常冗长和难看的消息

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

curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($this->arguments));
小消息的内容长度更大,但嵌入json显然更好

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


根据内容类型有两种不同的servlet解析方法是不优雅的,所以还有其他选择吗?

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

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

不,没有标有“更好”的解决方案。正如pinepain所说,这实际上取决于您发送什么样的数据以及如何解析/处理它。JSON非常适合随请求发送附加数据

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

Content Length
两种方法之间的差异不会成为问题的一部分,因为你的应用程序不是Facebook、Twitter或谷歌那样的怪物。过早优化是万恶之源。

您可以阅读关于格式的类似讨论

如果保证编码数据的结构是 名称-值对,x-www-form-urlencoded似乎足够了。如果 结构可能(任意)复杂(例如嵌套列表或 关联数组),然后一定要使用JSON


至于我,我是接吻高手。在您的情况下,JSON/XML/无论在时间、内存和CPU周期方面有什么额外的成本。x-www-form-urlencoded数据结合了可读性和紧凑性,因此我敢打赌这是您的选择。

SHORT:x-www-form-urlencoded。LONG:这实际上取决于您发送的数据类型(复杂的嵌套对象或像示例中那样的少数字段)。此外,这还取决于您将如何处理发送的数据,它将立即被解析和处理,还是将被存储并按原样发送给用户(以json编码格式)?@当数据被发送到glassfish服务器,被解析并插入Cassandra数据库时,它可以像下面这样嵌套:
{'data':json\u encode({'text':'2klines..,'author':'me'}),'id':'14141','keywords':json_encode({[{'tag':['blue','red']},{'author':['me']}}),…}
使用相同的方法来做事情,简化了很多。为什么不到处使用json呢?因为PHP将表单数据视为$\u POST/$\u GET/$\u请求变量,而json数据则包含无聊的文件内容('php://input')。我不喜欢这个世界围绕PHP旋转。在Node.js中,使用JSON而不是表单数据是非常简单和自然的。我在这里读到的可能重复的内容是:“过早优化是万恶之源。使用JSON吧。”这是没有帮助的。OP显然在询问这两种解决方案之间的差异。此外,谁知道这是否为时尚早?OP可能在项目结束时一直在寻找易于实现的优化选项。
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($this->arguments));