Answers:
Create = PUT with a new URI
POST to a base URI returning a newly created URI
Read = GET
Update = PUT with an existing URI
Delete = DELETE
根据与PUT一起使用的URI的存在,PUT可以映射到Create和Update。
POST映射到创建。
更正:POST也可以映射到Update,尽管它通常用于Create。POST也可以是部分更新,因此我们不需要建议的PATCH方法。
关键在于您是否要进行幂等的更改。就是说,如果对消息执行两次操作将导致“相同”的事情就好像只执行了一次一样,那么您将得到幂等的更改,应将其映射到PUT。如果不是,它将映射到POST。如果您从不允许客户端合成URL,则PUT非常接近Update,而POST可以很好地处理Create,但这绝对不是唯一的方法。如果客户端知道它要创建/foo/abc
并且知道要放置什么内容,则它作为PUT可以正常工作。
POST的规范描述是当您承诺购买某物时:这是没人愿意在不知情的情况下重复进行的操作。相比之下,可以使用PUT预先设置订单的派送地址即可:告诉您发送6 Anywhere Dr, Nowhereville
一次,两次或一百次无关紧要:它仍然是相同的地址。这是否意味着它是一个更新?可能是……这完全取决于您要如何编写后端。(请注意,结果可能会有所不同:您可以在用户上次执行PUT时向用户报告,作为资源表示的一部分,这将确保重复的PUT不会导致相同的结果,但结果仍会在功能上是“相同的”。)
POST
和的用例之间的区别PUT
是一个有趣的区别,应该回答“哪个是'创建'和哪个是'更新'?”的答案。清楚得多。此外,关于API的实现,可以认为重复项PUT
应等于无声操作,而POST
如果要发送的数据的某些方面在数据存储中保持唯一性,则重复项可能会引发异常。支持应用程序。
Stormpath上有一段很棒的youtube视频谈话,实际上对此做了解释,URL应该跳到视频的正确部分:
同样值得一提的是,它花费了一个多小时的时间,但是如果您想花时间来构建REST API,则非常有趣。
REST的构建块主要是资源(和URI)和超媒体。在这种情况下,这GET
是获取资源表示形式的方法(实际上可以将其映射为SELECT
CRUD术语)。
但是,您不必一定期望CRUD操作与HTTP动词之间是一对一的映射。PUT
和之间的主要区别在于POST
它们的幂等属性。POST
也通常用于部分更新,因为PUT
通常意味着发送资源的全新表示。
我建议阅读以下内容:
的HTTP规范也是一个有用的参考:
PUT方法请求将封闭的实体存储在提供的Request-URI下。
[...]
POST和PUT请求之间的根本区别体现在Request-URI的不同含义上。POST请求中的URI标识将处理封闭实体的资源。该资源可能是一个数据接受过程,某个其他协议的网关或一个接受注释的单独实体。相比之下,PUT请求中的URI标识请求中包含的实体-用户代理知道要使用的URI,并且服务器绝不能尝试将请求应用于其他资源。如果服务器希望将请求应用于其他URI,
一般来说,这是我使用的模式: