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

IMB*_*IMB 17 php api rest json

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

$data = array('foo' => 'bar');
$rest->post($data);
Run Code Online (Sandbox Code Playgroud)

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

$data = array('foo' => 'bar');
$data = json_encode($data);
$rest->post($data);
Run Code Online (Sandbox Code Playgroud)

不确定是否有这样做的标准方法,或者如果没有问题,但在设计API时通常建议采用什么?

编辑:似乎有混乱.为了澄清我同意JSON应该用于客户端消费,但这个问题是关于SERVER消费.SERVER是否应接受来自其客户端的JSON或POST数据?

FtD*_*Xw6 6

如果您是创建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,所以我不知道你一直在阅读什么资源,但我很确定你误解了他们的建议.

  • 我是创建API的人,这个问题非常有意义,因为如果客户端发送给我(服务器)一个JSON字符串我无法用`$ _POST`读取它,我需要使用其他方法(例如,`parse_str(file_get_contents(' php:// input'),$ data);`).所以这个问题很重要,因为两种方式都是可能的(JSON或POST数组).共识是JSON是通用的,但正如你所说,有些人将使用POST数组,这就是我的问题的原因.哪个是哪个? (5认同)
  • 是的,显然是用PHP编写的,但数据是以JSON的形式传输的.等等,我们为什么要争论这个?无论是PHP,ASP,JS等,它都是`json encoded`.问题是发送为POST数组和POST JSON的客户端之间.无论用什么语言,两者都可以完成. (2认同)
  • @drrcknlsn我实际上来到这个页面因为我有一个完全相同的问题.回答问题是一回事,但以合格的"这是愚蠢的"开始它并不是启动它的方式,特别是因为上下文使其相当清楚. (2认同)

Gun*_*ess 0

JSON 更有意义,因为它与语言无关,并且在 API 扩展时非常有用。

  • 如果我错了,请纠正我,但不是所有语言都能够将 POST 数据作为数组发送? (2认同)