REST API:将主体请求为JSON或纯POST数据


REST API: Request body as JSON or plain POST data?

我目前正在构建一个REST API。目前所有的GET方法都使用JSON作为响应格式。POST和PUT操作的最佳实践是什么?在请求正文中使用JSON还是纯POST?我找不到关于这件事的任何消息。

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

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

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

现在,您决定采用什么格式,实际上更多的是如何使用API的问题。如果它主要是从web浏览器处理表单提交,那么使用表单字段编码可能是最合理的做法,因为它可以让客户端更容易地进行交互。

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

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

最后,无论是在服务器端还是在客户端,都要使用最简单的方法(因为我认为您还将编写所讨论的API的主要客户端消费者)。简单性总是优先于复杂性,直到你能够明确地证明更复杂的复杂性会给你带来可衡量的好处。

此外,我要提到的最后一件事是REST不仅仅是关于干净的URL或正确使用HTTP谓词。这些方面真的只是锦上添花。REST体系结构背后的核心思想是超文本是应用程序状态的引擎。通过简单地跟踪服务器响应中的URL,一个好的客户端可以了解所有可用的操作,并且不需要知道除基本URL之外的任何信息。其他一切都可以从中发现。再加上定义良好的内容类型,你就有了一个世界,在这个世界里,许多客户端可以与许多服务器通信,所有服务器都说相同的"语言",客户端不需要知道关于服务器的任何信息(反之亦然),除了基本URL和内容类型。这就是REST的全部内容。

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

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