背景信息分析:
根据 RFC 2616,第 9.5 条,POST 用于创建资源:
使用 POST 方法要求原始服务器接受请求中包含的实体作为请求-URI 在请求线中识别的资源的新子属。
根据 RFC 2616,第 9.6 条,PUT 用于创建或取代资源:
PUT 方法要求关闭的实体存储在提供的请求-URI. 如果请求-URI 提到已经存在的资源,关闭的实体 SHOULD 将被视为居住在原始服务器的修改版本. 如果请求-URI 没有指向现有资源,并且 URI 能够由请求用户年龄定义为新资源。
我的问题:
那么,哪种HTTP方法应该用于创建资源?或者两者都应该得到支持?
简短答案:
简单的规则:使用 POST 创建,使用 PUT 更新。
长答:
邮件:
POST 用于向服务器发送数据,当资源的 URL 未知时有用
皮特:
PUT 用于将状态转移到使用的服务器,当资源的 URL 已知时
更长的答案:
要了解它,我们需要质疑为什么PUT是必要的,什么问题PUT试图解决POST不能。
从REST架构的角度来看,这并不重要,我们也可能没有PUT,但从客户开发者的角度来看,它使他的生活更简单。
在PUT之前,客户无法直接知道服务器所产生的URL,或者如果它全部产生的URL,或者是否要发送到服务器的数据已经更新了,PUT缓解了所有这些头痛的开发者。
大多数时候,你会用它们如下:
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 仅仅是该服务应该从现在开始使用的内容的声明,以便代表客户所识别的资源; POST 是该服务应该从现在开始包含(可能复制)的内容的声明,但服务器如何识别该内容。
PUT x(如果 x 识别一个资源):“用我的内容取代 x 识别的资源的内容。
原始答案(可能更容易阅读):
“拿我给你的东西,把它放在你想要的任何地方,只要你给我它的URL,当你完成。
雖然可能有一種有趣的方式來描述這些,但它似乎與從答案到網站的不同聲明相矛盾。
如果您是使用 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网站链接。