为什么不将PUT用于需要有效负载的REST查询?

lre*_*der 6 rest

REST建议通过GET方法完成查询(而不是资源创建).在某些情况下,查询数据太大或结构化使得难以放入URL,并且为了解决这个问题,修改RESTful API以支持与主体的查询.

似乎需要body的RESTful查询的约定是使用POST.这里有一些例子:

查询不会修改系统的内部状态,但POST不支持幂等操作.但是,PUT是幂等的.为什么对于需要正文的查询,RESTful API是否将PUT与正文而不是POST一起使用?

注意: 一个流行的问题询问哪个(PUT vs POST)是创建资源的首选.这个问题询问为什么PUT不用于需要实体的查询.

Eve*_*ert 4

不。PUT可能是幂等的,但它也有特定的含义。PUT 中的请求正文应用于替换URI 中的资源。

没有POST做出这样的假设。请注意,使用POST请求意味着该请求可能不是幂等的,在特定情况下它仍然可能是幂等的。

但是,您可以使用 来做到这一点PUT,但它需要您跳过一个额外的圈。基本上,您可以使用 创建一个“查询资源” PUT,然后GET立即使用 after 来获取该查询资源的结果。也许这就是您所追求的,但这是最 RESTful 的,因为生成的查询结果仍然可以链接到。POST(如果您使用请求,则完全缺少某些东西)。