REST API:请求主体为JSON还是普通POST数据?

时间:2012-03-19 15:26:00

标签: php json api rest post

我目前正在构建REST API。所有GET方法目前都使用JSON作为响应格式。什么是POST和PUT操作的最佳实践?在请求正文或普通POST中使用JSON?我找不到任何关于此事的内容。

我看到Twitter使用POST作为例子: https://dev.twitter.com/docs/api/1/post/direct_messages/new

使用JSON格式有什么好处?我从github得到的API控制器(已完成一半)需要JSON。真想知道为什么我会选择使用它。

2 个答案:

答案 0 :(得分:49)

POST,PUT,GET都是HTTP动词,它们本身并不表示传输数据的格式,因此没有POST格式。这意味着您可以以您选择的任何方式对数据进行编码。

现在,您决定使用哪种格式真的更多地取决于您的API通常如何使用。如果它主要是从Web浏览器提交表单提交,那么使用表单字段编码可能是最合理的事情,因为它使客户端更容易进行交互。

另一方面,如果您主要是从AJAX调用接收JSON数据,那么接收JSON格式可能有意义。如果您同时执行这两项操作,则无法接受两种格式的数据。

要考虑的另一个方面是您将来回传递的数据结构的复杂性。表单编码(类似于查询字符串编码)是键值结构,而JSON(或XML)允许更丰富的数据结构。

最后,请使用服务器端的最简单的内容,以及客户端上的任何内容(因为我假设您也将编写相关API的主要客户端使用者)。简单性总是优先于复杂性,直到您可以明确地表明更复杂性为您带来可衡量的收益。

另外,我要提到的最后一件事是REST不只是关于干净的URL或正确使用HTTP动词。这些方面真的只是锦上添花。 REST架构背后的核心思想是 Hypertext is the engine of application state 。通过简单地跟踪服务器响应中的URL,一个好的客户端可以了解所有可用的操作,并且不需要知道除基本URL之外的任何内容。其他所有东西都可以从中发现。结合定义明确的内容类型,你就拥有了许多客户可以与许多服务器进行通信的世界,所有服务器都使用相同的“语言”,客户不需要知道任何关于除基本URL和内容类型之外的服务器(或反之亦然)。这就是REST的全部意义。

答案 1 :(得分:5)

这取决于您要交换的数据。如果它是一个复杂的结构,您需要以结构化的方式(例如XML或JSON)发送它。在java web应用程序中,json更轻量级,因此它优于XML。

如果您想从表单“application / x-www-urlformencoded”类型中发送一些字段,也可以使用。