哪个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动词之间的一对一映射。 PUTPOST之间的主要区别在于它们的幂等性。 POST也更常用于部分更新,因为PUT通常意味着发送资源的全新表示。

我build议读这个:

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方法,即使浏览器不支持它。