哪种HTTP方法与哪种CRUD方法匹配?

时间:2011-06-01 14:57:09

标签: http rest crud http-method

在RESTful样式编程中,我们应该使用HTTP方法作为构建块。虽然哪种方法与经典的CRUD方法相匹配,但我有点困惑。 GET / Read和DELETE / Delete非常明显。

然而,PUT / POST有什么区别?它们是否与“创建和更新”一对一匹配?

9 个答案:

答案 0 :(得分:280)

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可以映射到Create和Update,具体取决于PUT使用的URI的存在。

POST映射到Create。

更正:POST也可以映射到Update,尽管它通常用于Create。 POST也可以是部分更新,因此我们不需要提议的PATCH方法。

答案 1 :(得分:46)

整个关键是您是否正在进行幂等更改。也就是说,如果对消息采取两次操作将导致“相同”的事情就像只执行一次一样,那么你就会有一个幂等的改变,它应该被映射到PUT。如果没有,它映射到POST。如果你从不允许客户端合成URL,PUT非常接近Update,POST可以处理Create就好了,但这肯定不是唯一的方法;如果客户端知道它想要创建/foo/abc并知道要放在哪里的内容,它就可以作为PUT工作。

POST的规范描述是当你承诺购买东西时:这是一个没有人想要在不知情的情况下重复的动作。相比之下,预先设置订单的发货地址可以通过PUT完成:如果你被告知发送到6 Anywhere Dr, Nowhereville一次,两次或一百次都没关系:它仍然是相同的地址。这是否意味着它是一个更新?可能......这一切都取决于你想要如何编写后端。 (请注意,结果可能不相同:您可以在用户上次执行PUT作为资源表示的一部分时向用户报告,这将确保重复的PUT不会导致相同的结果,但结果仍然是在功能意义上是“相同的”。)

答案 2 :(得分:30)

我正在寻找相同的答案,这就是IBM所说的。 IBM Link

POST            Creates a new resource.
GET             Retrieves a resource.
PUT             Updates an existing resource.
DELETE          Deletes a resource.

答案 3 :(得分:9)

stormpath有一个很棒的youtube视频讲话实际上解释了这个,URL应该跳到视频的正确部分:

stormpath youtube video

另外值得观看它超过一个小时的谈话,但如果你想花时间建立一个REST API,那就非常有用了。

答案 4 :(得分:8)

现在(2016)最新的HTTP动词是GET,POST,PATCH,PUT和DELETE

概述

  • HTTP GET - SELECT / Request
  • HTTP PUT - UPDATE
  • HTTP POST - INSERT / Create
  • HTTP PATCH - 当 PUT 时,完整的资源表示很麻烦并且会占用更多带宽,例如:当您需要部分更新列时
  • HTTP DELETE - DELETE

希望这有帮助!

如果您对设计REST API感兴趣,这是一个令人厌烦的阅读! website online version github repository

答案 5 :(得分:7)

这取决于具体情况......但总的来说:

PUT =使用资源的具体URI更新或更改具体资源。

POST =在给定URI的源下创建一个新资源

编辑博文:

PUT: /博客/进入/ 1

创建一个新的:

POST: /博客/条目

PUT可能会在请求之前清除新资源的URI的某些情况下创建新资源。 POST也可用于实现其他几个用例,其他用例不包括(GET,PUT,DELETE,HEAD,OPTIONS)

对CRUD系统的一般理解是GET = request,POST = create,Put = update,DELETE = delete

答案 6 :(得分:4)

REST的构建块主要是资源(和URI)和超媒体。在此上下文中,GET是获取资源表示的方式(实际上可以在CRUD术语中映射到SELECT。)

但是,您不一定期望CRUD操作和HTTP谓词之间的一对一映射。 PUTPOST之间的主要区别在于它们的幂等属性。 POST也更常用于部分更新,因为PUT通常意味着发送资源的全新表示。

我建议读这个:

HTTP specification也是一个有用的参考:

  

PUT方法请求   封闭的实体存储在   提供了Request-URI。

     

[...]

     

之间的根本区别   POST和PUT请求反映在   不同的含义   Request-URI中。 POST请求中的URI   识别将要的资源   处理随附的实体。那   资源可能是数据接受的   进程,通往其他一些网关   协议,或单独的实体   接受注释。相比之下,   PUT请求中的URI标识   随请求附上的实体 -   用户代理知道URI是什么   打算和服务器不得   尝试将请求应用于某些人   其他资源。如果服务器需要   请求应用于   不同的URI,

答案 7 :(得分:3)

一般来说,这是我使用的模式:

  • HTTP GET - SELECT / Request
  • HTTP PUT - UPDATE
  • HTTP POST - INSERT / Create
  • HTTP DELETE - DELETE

答案 8 :(得分:1)

Symfony项目尝试将其HTTP方法与CRUD方法联系起来,their list将它们关联起来如下:

  • GET从服务器检索资源
  • POST在服务器上创建资源
  • PUT更新服务器上的资源
  • DELETE从服务器删除资源

值得注意的是,正如他们在该页面上所说,“实际上,许多现代浏览器不支持PUT和DELETE方法。”

从我记忆中来看,Symfony为那些在生成表单时不支持它们的浏览器“伪造”PUT和DELETE,以便尽可能接近使用理论上正确的HTTP方法,即使浏览器没有不支持它。