我应该使用GET还是POST REST API方法?

时间:2019-07-02 05:12:44

标签: rest

我想检索有关大量资源的数据。假设一个书ID数组,响应为书对象的JSON数组。我想将请求有效负载作为JSON发送到服务器。

我应该使用GETPOST方法吗?

注意: 我不想为每个图书ID提出多个GET请求。

POST似乎令人困惑,因为它仅在请求创建资源或修改服务器状态时才使用。

3 个答案:

答案 0 :(得分:1)

  

我想检索有关大量资源的数据。假设一个书ID数组,响应是书对象的JSON数组。

如果您正在考虑将书籍ID的数组作为HTTP请求的消息正文传递,则GETbad idea

  

GET请求消息中的有效负载没有定义的语义;在GET请求上发送有效内容正文可能会导致某些现有实现拒绝该请求。

您应该改用POST

  

POST似乎令人困惑,因为它仅在请求创建资源或修改服务器状态时才使用。

那不是相当POST可以用于任何事物-请参见GraphQLSOAP。但是您使用POST放弃的是中间组件参与对话的能力。

例如,对于有效只读的情况,您想使用safe方法,因为它可以进行预缓存优化,并在不可靠的网络上自动重试丢失的响应。 POST没有额外的语义约束,因此您会失败。

HTTP真正想要的是您GET使用URI;这可以通过两种相对简单的方法之一来完成:

1)将ID发布到服务器,以创建新资源(意味着服务器为其自身保留ID列表的副本),并以交换的方式接收新的资源标识符。每当您想知道结果的当前表示形式时,都可以使用此新标识符进行GET。

2)将所需的信息编码到URI本身中。最常见的是,这是使用URI的查询部分完成的,尽管这并非严格必要。不利之处在于,如果ID数组的URI编码表示形式很长,那么您可能会遇到一些实施任意URI限制的实现方式。

并非总是有很好的答案:

  

REST接口被设计为对于大颗粒超媒体数据传输是高效的,针对Web的常见情况进行了优化,但是导致的接口对于其他形式的体系结构交互不是最佳的。

答案 1 :(得分:0)

如果我的理解正确,那么您想一次获得列表中所有项目的列表。使用GET可以实现这一点,因为REST返回JSON,默认情况下最多可以包含100个项目,并且如果需要,可以通过指定$ top获得更多的项目。

就写回或写到服务器而言,POST将是您要寻找的东西,据我了解,这需要一对一。

答案 2 :(得分:0)

您将使用GET-Request并将您的请求数据(book-id数组)放在ajax(或您将要使用的任何内容)请求的data-section中。参见How to pass parameters in GET requests with jQuery