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

Dre*_*rew 206 rest http crud http-method

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

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

Pau*_*gan 291

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
Run Code Online (Sandbox Code Playgroud)

PUT可以映射到Create和Update,具体取决于PUT使用的URI的存在.

POST映射到Create.

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

  • +1:您在PUT之间建立的区别是创建资源,其名称(URI)由客户端分配,POST用于创建名称由服务器分配的资源,这一点很重要.请参阅Richardson和Ruby的Restful Web Services(O'Reilly)进行讨论. (15认同)
  • 使用XHR,Web浏览器支持@JimFerrans PUT和DELETE.但是,在HTML表单的上下文中,HTML规范不支持它们,因此浏览器也不能. (13认同)
  • 由于Web浏览器尚不支持PUT和DELETE,因此可以通过在POST的URI上添加类似method = PUT或method = DELETE的查询字符串参数来"重载POST". (9认同)
  • 虽然没有规范地映射到CRUD中的字母,但是许多REST框架也使用GET/entity /来**列表**实体_entity_.GET/entity/id将读取与_id_匹配的特定实体. (3认同)
  • 尼斯分析http://jcalcote.wordpress.com/2008/10/16/put-or-post-the-rest-of-the-story/ (2认同)
  • 以下是Martin Fowler讨论Richardson成熟度模型的链接,并对其进行了总结:http://martinfowler.com/articles/richardsonMaturityModel.html (2认同)
  • 更新也可以对应于PATCH,PATCH应该表示部分更新(例如,实体上的单个属性).注意:对PATCH的支持有点不稳定; 并非所有服务器软件都实现了此HTTP方法. (2认同)

Don*_*ows 49

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

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

  • 这个答案及以下评论提出了一个重要的观点,即在将CRUD与HTTP REST语义密切相关(1to1)时应该谨慎*.这不是规范映射. (2认同)

ex0*_*b1t 31

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

POST            Creates a new resource.
GET             Retrieves a resource.
PUT             Updates an existing resource.
DELETE          Deletes a resource.
Run Code Online (Sandbox Code Playgroud)


d1j*_*i1b 11

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

概观

  • HTTP GET - SELECT/Request
  • HTTP PUT - 更新
  • HTTP POST - INSERT/Create
  • HTTP PATCH - 当PUT完成一个完整的资源表示很麻烦并利用更多带宽时,例如:当你必须部分更新一列时
  • HTTP DELETE - DELETE

希望这可以帮助!

如果您对设计REST API感兴趣,这是一个令人厌烦的阅读!网站在线版 github 存储库


ple*_*shy 9

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

stormpath youtube video

另外值得观看它超过一个小时的谈话,但如果您考虑投入时间来构建REST api,则非常有用.


Stu*_*uck 7

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

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

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

编辑博文:

PUT:/ blog/entry/1

创建一个新的:

POST:/ blog/entry

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

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