HTTP POST主体的MIME与JSON

时间:2012-07-11 19:52:20

标签: jquery ajax json http rest

我们有一个HTTP RPC api,所有参数都要使用JSON进行编码。这有效,但在http帖子的主体中混合使用MIME x-www-form-urlencoding和JSON实际上并不是很优雅。即身体可能看起来像这样:

POST /my/rpc/api/endpoint

foo={"x":123,"y":true}&bar=[1,2,3,4,5,6,7]

我见过根本不使用MIME的服务,而是使用完整的json编码。 E.g:

POST /my/rpc/api/endpoint

{"foo":{"x":123,"y":true},"bar":[1,2,3,4,5,6,7]}

我认为后一种解决方案看起来更清晰,但是我不太确定这是否违反了HTTP约定以及这会产生什么影响。这是要避免的吗?例如,这会使客户更难实现吗?

2 个答案:

答案 0 :(得分:1)

在POST有效负载中使用JSON没有任何问题。重要的是使用适当的互联网媒体类型,即“application / json”,而不是“application / x-www-form-urlencoded”。

答案 1 :(得分:0)

使用x-www-form-urlencoded传递的数据被视为字符串。话虽这么说,你可以把字符串视为你想要的。如果你有一个格式正确的字符串,编码和解码为JSON,那将非常有效。如果您有一种简单的方法来查看帖子正文,则可以只提取JSON字符串。

使用PHP,我实际上不确定如何看待身体,所以我必须做这样的事情:

json='{"foo":{"x":123,"y":true},"bar":[1,2,3,4,5,6,7]}'
//php
$json = json_decode($_POST['json']);