关于rest:哪些HTTP方法与哪种CRUD方法匹配?

Which HTTP methods match up to which CRUD methods?

在RESTful样式编程中,我们应该使用HTTP方法作为构建基块。 尽管有些方法与经典的CRUD方法匹配,但我有些困惑。 GET / Read和DELETE / Delete很明显。

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


1
2
3
4
5
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不会导致相同的结果,但结果仍会在功能上是"相同的"。)


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

1
2
3
4
POST            Creates a new resource.
GET             Retrieves a resource.
PUT             Updates an existing resource.
DELETE          Deletes a resource.

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

总览

  • HTTP GET-选择/请求
  • HTTP PUT-更新
  • HTTP POST-插入/创建
  • HTTP PATCH-当放置完整的资源表示时比较麻烦并且占用更多带宽,例如:当您必须部分更新列时
  • HTTP删除-删除

希望这可以帮助!

如果您对设计REST API感兴趣,那么这是一本Ansewome读物!网站在线版本github存储库


Stormpath上有一个很棒的youtube视频话题,实际上对此做了解释,URL应该跳到视频的正确部分:

Stormpath YouTube视频

同样值得一提的是,它花费了一个多小时的时间,但是如果您想花时间来构建REST API,则非常有趣。


这取决于具体情况。但是,通常:

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

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

编辑博客文章:

放:
/ blog / entry / 1

创建一个新的:

开机自检:
/博客/条目

在某些情况下,PUT可能会创建新资源,其中新资源的URI在请求之前是明确的。
POST也可以用于实现其他几个用例,而其他用例则不涉及(GET,PUT,DELETE,HEAD,OPTIONS)

对CRUD系统的一般理解是GET =请求,POST =创建,Put =更新,DELETE =删除


REST的构建块主要是资源(和URI)和超媒体。在这种情况下,GET是获取资源表示形式的一种方法(实际上可以用CRUD术语将其映射到SELECT)。

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

我建议阅读以下内容:

HTTP规范也是有用的参考:

The PUT method requests that the
enclosed entity be stored under the
supplied Request-URI.

[...]

The fundamental difference between the
POST and PUT requests is reflected in
the different meaning of the
Request-URI. The URI in a POST request
identifies the resource that will
handle the enclosed entity. That
resource might be a data-accepting
process, a gateway to some other
protocol, or a separate entity that
accepts annotations. In contrast, the
URI in a PUT request identifies the
entity enclosed with the request --
the user agent knows what URI is
intended and the server MUST NOT
attempt to apply the request to some
other resource. If the server desires
that the request be applied to a
different URI,


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

  • HTTP GET-选择/请求
  • HTTP PUT-更新
  • HTTP POST-插入/创建
  • HTTP删除-删除


Symfony项目尝试将其HTTP方法与CRUD方法结合在一起,并且它们的列表将它们关联如下:

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

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

据我所知,Symfony对于那些在生成表单时不支持它们的浏览器"伪造"了PUT和DELETE,以便即使在浏览器不支持的情况下也尽可能地使用理论上正确的HTTP方法它。