如何在REST请求中应用PUT动词?

时间:2011-05-07 18:57:59

标签: http rest

我正在使用REST服务器。我有一个订单RESOURCE。

根据我的理解,PUT动词应根据URL创建新订单。我的问题是:如果资源是新的并且您不知道新订单的ID,那么它如何工作?

我知道有关POST与PUT的争论,但我引用了PUT {3}}的w3规范

“如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源”

4 个答案:

答案 0 :(得分:6)

在RESTful API中,PUT通常用于更新资源,如果在指定的URL(即客户端)中不存在,则创建提供id)。如果服务器生成id,RESTful API通常使用POST来创建新资源。在后一种情况下,通常在重定向中返回或指定生成的id / url。

示例:POST /orders/

答案 1 :(得分:2)

根据W3CPUTPOST都可以用于更新和/或创建。 它们之间的基本区别是服务器如何处理 Request-URI PUT URI标识实体,服务器不应尝试将其映射到另一个URL,而POST URI可以是该内容的处理程序。例子:

POST /order的新订单可以,但不是PUT。您可以使用PUTPOST/order/1更新订单1。

答案 2 :(得分:1)

简单地说POST用于创建,PUT用于更新。如果您没有对象的ID,因为它尚未创建,您应该使用POST。如果某个对象存在并且您只是没有该ID,那么您将不得不使用某种GET来搜索它。

要记住的是IdempotencePUT(和GET就此而言)是幂等的。基本上意思是,你可以反复点击相同的URL,它不应该在第二次或第三次产生差异(它编辑一次数据,然后再次调用它不会再次进行更改)。但是POST 幂等。意思是,你连续3到4次点击相同的URL,它将继续改变数据(创建越来越多的对象)。这就是为什么如果您点击返回POST网址,浏览器会发出警告。

答案 3 :(得分:0)

您说,“不知道新订单的ID”因此以下情况并非如此“请求用户代理能够将URI定义为新资源”,因此PUT不适合您的方案

混淆在哪里?我当然假设Id将成为URL的一部分。