哪个HTTP方法匹配哪个CRUD方法?
在REST风格的编程中,我们应该使用HTTP方法作为构build块。 我有点困惑,虽然哪些方法匹配经典的CRUD方法。 GET / Read和DELETE / Delete足够明显。
但是,PUT / POST有什么区别呢? 它们是否与创build和更新一一对应?
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可以映射到“创build”和“更新”,具体取决于PUT使用的URI的存在。
POST映射到Create。
更正:POST也可以映射到更新,虽然它通常用于创build。 POST也可以是部分更新,所以我们不需要build议的PATCH方法。
整个关键是你是否正在做一个幂等的变化。 也就是说,如果对消息采取两次行动,会导致“同一个”事件在那里,就好像它只做了一次,你就有了一个幂等的变化,它应该映射到PUT。 如果不是,则映射到POST。 如果你永远不允许客户端合成URL,PUT和Update很接近,POST可以处理Create就好,但这绝对不是唯一的办法; 如果客户端知道它想要创build/foo/abc
并且知道要在那里放置什么内容,那么它就可以像PUT一样工作。
POST的标准描述是当你承诺购买某些东西的时候:这是一个没有人知道它就不想重复的行为。 相比之下,事先为订单设置发货地址可以用PUT来完成:如果您被告知发送给6 Anywhere Dr, Nowhereville
一次,两次或一百次6 Anywhere Dr, Nowhereville
:它仍然是相同的地址。 这是否意味着这是一个更新? 可能…这一切都取决于你想如何写后端。 (请注意,结果可能不完全相同:当用户上次执行PUT作为资源表示forms的一部分时,可以向用户报告,这将确保重复的PUT不会导致相同的结果,但结果仍然会在function上是“相同的”。)
我正在寻找相同的答案,这是IBM说的。 IBM Link
POST Creates a new resource. GET Retrieves a resource. PUT Updates an existing resource. DELETE Deletes a resource.
有一个很好的youtubevideo谈话stormpath实际上解释这一点,该url应该跳到video的正确部分:
stormpath youtubevideo
另外值得一提的是,如果你想花时间去构build一个REST api的话,那么这个过程还有一个多小时的时间。
这取决于具体的情况..但一般来说:
PUT =使用资源的具体URI更新或更改具体资源。
POST =在给定的URI的源下创build一个新的资源。
即
编辑博客文章:
PUT:/ blog / entry / 1
创build一个新的:
POST:/ blog / entry
在请求之前,PUT可能会在新的资源的URI被清除的情况下创build一个新的资源。 POST也可以用来实现其他一些用例,这些用例不包含在其他用例中(GET,PUT,DELETE,HEAD,OPTIONS)
对CRUD系统的一般理解是GET = request,POST = create,Put = update,DELETE = delete
REST的构build块主要是资源(和URI)和超媒体。 在这种情况下, GET
是获取资源表示的方式(实际上可以用CRUD方式将其映射到SELECT
)。
但是,您不一定期望CRUD操作和HTTP动词之间的一对一映射。 PUT
和POST
之间的主要区别在于它们的幂等性。 POST
也更常用于部分更新,因为PUT
通常意味着发送资源的全新表示。
我build议读这个:
- http://roy.gbiv.com/untangled/2009/it-is-okay-to-use-post
- http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
HTTP规范也是一个有用的参考:
PUT方法要求封闭的实体存储在提供的Request-URI下。
[…]
POST和PUT请求之间的根本区别反映在Request-URI的不同含义中。 POST请求中的URI标识将处理封闭实体的资源。 该资源可能是数据接受过程,某个其他协议的入口,也可能是接受注释的单独实体。 相比之下,PUT请求中的URI标识了请求所包含的实体 – 用户代理知道哪个URI是预期的,服务器不能尝试将请求应用到其他资源。 如果服务器希望将请求应用于不同的URI,
一般来说,这是我使用的模式:
- HTTP GET – SELECT / Request
- HTTPinput – 更新
- HTTP POST – INSERT / Create
- HTTP删除 – 删除
现在(2016)最新的HTTP动词是GET,POST, PATCH ,PUT和DELETE
概观
- HTTP GET – SELECT / Request
- HTTPinput – 更新
- HTTP POST – INSERT / Create
- HTTP PATCH – 当一个完整的资源表示很麻烦并且使用更多的带宽时,例如:当你必须部分地更新列时
- HTTP删除 – 删除
希望这可以帮助!
如果您对deviseREST API感兴趣,这是一个非常重要的阅读! 网站在线版 Github 存储库
Symfony项目试图保持它的HTTP方法与CRUD方法的联系,并且它们的列表如下关联它们:
- GET从服务器获取资源
- POST在服务器上创build一个资源
- PUT更新服务器上的资源
- 删除从服务器删除资源
值得注意的是,正如他们在该页面上所说,“实际上,许多现代浏览器不支持PUT和DELETE方法。”
从我记忆中,Symfony在生成表单时为那些不支持它们的浏览器“伪造”PUT和DELETE,为了尽量接近使用理论上正确的HTTP方法,即使浏览器不支持它。