在RESTful样式编程中,我们应该使用HTTP方法作为构建块。虽然哪种方法与经典的CRUD方法相匹配,但我有点困惑。 GET / Read和DELETE / Delete非常明显。
然而,PUT / POST有什么区别?它们是否与“创建和更新”一对一匹配?
答案 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应该跳到视频的正确部分:
另外值得观看它超过一个小时的谈话,但如果你想花时间建立一个REST API,那就非常有用了。
答案 4 :(得分:8)
现在(2016)最新的HTTP动词是GET,POST,PATCH,PUT和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谓词之间的一对一映射。
PUT
和POST
之间的主要区别在于它们的幂等属性。 POST
也更常用于部分更新,因为PUT
通常意味着发送资源的全新表示。
我建议读这个:
HTTP specification也是一个有用的参考:
PUT方法请求 封闭的实体存储在 提供了Request-URI。
[...]
之间的根本区别 POST和PUT请求反映在 不同的含义 Request-URI中。 POST请求中的URI 识别将要的资源 处理随附的实体。那 资源可能是数据接受的 进程,通往其他一些网关 协议,或单独的实体 接受注释。相比之下, PUT请求中的URI标识 随请求附上的实体 - 用户代理知道URI是什么 打算和服务器不得 尝试将请求应用于某些人 其他资源。如果服务器需要 请求应用于 不同的URI,
答案 7 :(得分:3)
一般来说,这是我使用的模式:
答案 8 :(得分:1)
Symfony项目尝试将其HTTP方法与CRUD方法联系起来,their list将它们关联起来如下:
值得注意的是,正如他们在该页面上所说,“实际上,许多现代浏览器不支持PUT和DELETE方法。”
从我记忆中来看,Symfony为那些在生成表单时不支持它们的浏览器“伪造”PUT和DELETE,以便尽可能接近使用理论上正确的HTTP方法,即使浏览器没有不支持它。