2012-03-19 140 views
24

我目前正在构建一个REST API。所有GET方法当前都使用JSON作为响应格式。 POST和PUT操作的最佳做​​法是什么?在请求正文或纯POST中使用JSON?我无法找到关于此事的任何事情。REST API:请求正文为JSON还是普通POST数据?

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

什么是使用JSON格式的好处是什么?我从github获得的API控制器(已经完成了一半)期望JSON。真的想知道为什么我会选择使用它。

回答

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的全部内容。

+0

我想不出比这更明确的答案。我会考虑最容易出现的情况。由于本机JavaScript兼容性可能会导致JSON。感谢您的时间! – mauserrifle 2012-03-19 18:36:59

4

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

如果你想发送表单中的几个字段,“application/x-www-urlformencoded”类型也可以使用。