如果有效载荷很大,请休息POST VS GET

Rav*_*avi 10 rest

我理解GET和POST的定义如下.

GET:列出集合的成员,并使用其成员URI进行进一步导航.例如,列出所有待售汽车.

POST:在集合中创建一个新条目,集合自动分配ID.创建的ID通常作为此操作返回的数据的一部分包含在内.

MY API在服务器中搜索一些具有巨大请求负载的详细信息,在这种情况下我应该使用哪个动词?

也有人可以让我知道可以在查询字符串中传递的字符的长度.

Tim*_*sen 9

GET和POST请求之间的主要区别在于,在前者中,整个请求被编码为URL本身的一部分,而在后者中,参数在头之后发送.此外,在GET请求中,不同的浏览器会对URL的大小施加不同的限制.大多数现代浏览器至少允许200KB,但Internet Explorer似乎将URL大小限制为2KB.

话虽这么说,如果您怀疑您将传递大量参数,这些参数可能超过接收Web服务器对GET请求施加的限制,您应该切换到POST.

这是一个调查大多数现代浏览器的GET行为的网站,值得一读.

  • 使用POST有效地获取搜索结果不是RESTful. (3认同)
  • 出于教育目的,如果参数不适合 GET,您打算如何发送读取信息的请求? (2认同)
  • @Time使用`POST/queries`创建一个新的'query'实例.响应将是"201 Created",带有位置标题.然后,将使用`GET/queris/id-of-query-as-by-the-server`来检索计算结果.这将是RESTful,因为它处理资源.在响应主体*中响应带有结果*的POST是RPC,而不是REST. (2认同)

Nri*_*dra 6

晚会晚了,但是对于任何寻求解决方案的人来说,这可能有所帮助。

我只是想出了两种解决这个问题的策略。我将创建概念证明API,并测试哪种套件更适合我。这是我目前正在考虑的解决方案:

1. X-HTTP-Method-Override:

基本上,我们将使用POST / PUT方法隧道GET请求,并添加X-HTTP-Method-Override请求标头,以便服务器将请求路由到GET调用。易于实施,一口气即可工作。

2.分而治之:

将请求分为两个单独的请求。发送具有所有有效负载的POST / PUT请求,服务器将向其创建必要的响应并将其与键/ id一起存储在缓存/ db中,以访问数据。然后,服务器将使用“ Location”标头或可通过其访问存储的响应的Key / id进行响应。

现在,发送GET请求以及服务器在先前的POST请求上给定的密钥/位置。实现起来有点复杂,需要两个请求,还需要一个单独的策略来清理缓存的响应。

  • 另一种可能性是 POST 只会将请求数据保存为资源(但不会查找结果)并返回(该资源的)id。然后 GET 将传递该 ID。实现将 1)根据保存的请求数据查询/获取结果 2)擦除请求数据,3)响应结果 (2认同)

mch*_*raz -12

如果您要从服务器获取数据,请使用 GET。如果您想发布内容,请使用 POST。有效负载大小无关紧要。如果您想使用较小的有效负载,您可以实现分页。

  • “*有效负载大小无关*” - 理论上。 (2认同)
  • 您想要在 GET 请求中传递的所有“内容”都被编码到 URL 中。由于 URL 限制为 x 个字符,因此大小是相关的。问题是当 GET 的大小可能超过 url 限制时该怎么办 (2认同)