背景信息分析:
根据 RFC 2616,第 9.5 条,POST 用于创建资源:
使用 POST 方法要求原始服务器接受请求中包含的实体作为请求-URI 在请求线中识别的资源的新子属。
根据 RFC 2616,第 9.6 条,PUT 用于创建或取代资源:
PUT 方法要求关闭的实体存储在提供的请求-URI. 如果请求-URI 提到已经存在的资源,关闭的实体 SHOULD 将被视为居住在原始服务器的修改版本. 如果请求-URI 没有指向现有资源,并且 URI 能够由请求用户年龄定义为新资源。
我的问题:
那么,哪种HTTP方法应该用于创建资源?或者两者都应该得到支持?
在很简单的方式,我正在采取Facebook时间线的例子。
案例1:当你在时间表上发布某些东西时,这是一个新鲜的新输入,所以在这种情况下,他们使用POST方法,因为POST方法是无效的。
案例2:如果你的朋友第一次评论你的帖子,它也会在数据库中创建一个新的帖子,以便使用POST方法。
案例3:如果你的朋友编辑他的评论,在这种情况下,他们有一个评论 ID,所以他们将更新一个现有评论而不是创建一个新的数据库输入。
在单行中,使用 POST 在数据库中添加一个新的输入和 PUT 在数据库中更新一些东西。
雖然可能有一種有趣的方式來描述這些,但它似乎與從答案到網站的不同聲明相矛盾。
如果您是使用 Web API 的.NET 开发人员,事实是(从 Microsoft API 文档), http://www.asp.net/web-api/overview/creating-web-apis/creating-a-web-api-that-supports-crud-operations:
1. PUT = UPDATE (/api/products/id)
2. MCSD Exams 2014 - UPDATE = PUT, there are **NO** multiple answers for that question period.
确保您可以使用“POST”更新,但只需跟随与您提供的框架的协议。在我的情况下,它是.NET / Web API,所以PUT是为了更新,没有讨论。
我希望这有助于任何微软开发人员阅读所有评论与亚马逊和Sun/Java网站链接。
对于我来说,了解区别的关键是了解谁定义资源的ID:
例子(与某些地址服务)
POST (sever creates new resource)
client server/addresses // NOTE: no ID in the request
| |
| --{POST address data}--> |
| |
| <--{201, created addresses/321} | // NOTE: resource ID in the reply
| |
PUT (sever sets data of resource, creating it if necessary)
client server/addresses/321 // NOTE: *you* put the ID here!
| |
| --{PUT address data (to 321)}-->|
| |
| <--{201, created } | // NOTE: resource ID not required here
| |
这里有很多很好的答案,下面有很好的细节,但这帮助了我到达这个点。
大多数时候,你会用它们如下:
POST a resource into a collection PUT a resource identified by collection/:id。
例如:
POST /items PUT /items/1234
请注意,POST在收藏中“创建”一个新的元素,而PUT在某个URL中“替换”一个元素,但使用PUT进行部分修改是一种非常常见的做法,也就是说,只使用它来更新现有资源,并仅修改体内所包含的字段(忽略其他字段)。
请记住,REST是一组条约和指导方针,以保持您的API简单。 如果您结束了一个复杂的工作周围,只需检查“RESTfull”框,那么您正在击败目的。
PUT 就像向邮箱发送一封信,或者向邮箱发送一封电子邮件, PUT 就像当你把一个对象放在一个圆洞或一个地点(它有一个已知的地址)。
通过 POST,您将被发送到 QUEUE 或 COLLECTION 的地址;通过 PUT,您将被发送到项目的地址。
PUT是无效的,您可以发送请求100次,这并不重要,POST不是无效的,如果您发送请求100次,您将在邮箱中收到100个电子邮件或100个信件。
一般规则:如果您知道项目的身份或名称,请使用 PUT. 如果您希望项目的身份或名称由接收者分配,请使用 POST。
此分類上一篇