Rest API应该接受POST数组还是JSON字符串?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

我一直在阅读一些REST教程,其中一些人说,为了将数据发送到其他API,应该将发布数据作为数组发送,如下所示:

$data = array('foo' => 'bar');
$rest->post($data);

然后还有其他人说你应该发送这样的JSON数据:

$data = array('foo' => 'bar');
$data = json_encode($data);
$rest->post($data);

不知道是否有这样做的标准方式,或者如果没问题,但在设计API时通常会推荐什么?

似乎有困惑。澄清我同意JSON应该用于客户端消费,但这个问题是关于服务器消耗。服务器应该接受来自其客户的JSON或POST数据的含义?

提问于
用户回答回答于

其实,我认为这是一个很好的问题。不知道为什么它被downvoted。

另外,与我在一些评论中看到的相反,客户可以使用他想要的任何语言,而不仅仅是javascript。要知道哪种语言用于“构建”请求并不是服务器工作,只是请求有效。如果您认为发出请求的实体实际上可能是另一台服务器(考虑用于跨域发送请求的代理服务器),这样做更有意义。

这就是说,我个人认为服务器端使用XML或JSON更好。主要原因是验证。

根据模式验证XML或JSON更容易。此外,架构可以公开,并且设计良好的架构可以自己描述web服务。客户端甚至可以在将请求发送到服务器之前使用相同的模式来验证请求。

当然,传递url编码形式也是有效的。并且可以验证服务器端。所以我认为,在路上,这只是一个偏好问题。

用户回答回答于

如果你是创建RESTful API的人,那意味着你的应用程序是服务器并且正在接受请求,那么你的问题似乎很混乱。应用程序不会发送任何POST数据; 客户将会发送POST数据给你。

有人说,拥有一个接受JSON编码请求的API是可能的,但对于非常小众的场景来说,它确实是有用的。绝大多数客户将以application/x-www-form-urlencoded格式向您的API发布数据。PHP在幕后处理,并将数据公开为$_POST超全球。

如果正在讨论如何响应 POST请求以及应该使用什么格式,那么这将取决于客户端希望发送它的格式。客户端将在Accept标头中指定此格式,或者某些API允许它在URL中指定(例如foo.com/some/thing/123.jsonfoo.com/some/thing/123/json)。客户不需要告诉应用程序需要什么格式,所以应该选择合理的默认值。现在大多数API将使用JSON。

但是我从来没有听说过一种可以理解序列化PHP数组格式的API,所以我不知道你一直在阅读什么资源,但我敢肯定你误解了他们的建议。

扫码关注云+社区