1

我们有一个 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 编码的服务。例如:

POST /my/rpc/api/endpoint

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

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

4

2 回答 2

1

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

于 2012-07-11T20:37:12.190 回答
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']);
于 2012-07-11T19:57:41.377 回答