背景信息分析:

根据 RFC 2616,第 9.5 条,POST 用于创建资源:

使用 POST 方法要求原始服务器接受请求中包含的实体作为请求-URI 在请求线中识别的资源的新子属。

根据 RFC 2616,第 9.6 条,PUT 用于创建或取代资源:

PUT 方法要求关闭的实体存储在提供的请求-URI. 如果请求-URI 提到已经存在的资源,关闭的实体 SHOULD 将被视为居住在原始服务器的修改版本. 如果请求-URI 没有指向现有资源,并且 URI 能够由请求用户年龄定义为新资源。

我的问题:

那么,哪种HTTP方法应该用于创建资源?或者两者都应该得到支持?


当前回答

PUT 仅仅是该服务应该从现在开始使用的内容的声明,以便代表客户所识别的资源; POST 是该服务应该从现在开始包含(可能复制)的内容的声明,但服务器如何识别该内容。

PUT x(如果 x 识别一个资源):“用我的内容取代 x 识别的资源的内容。

原始答案(可能更容易阅读):

“拿我给你的东西,把它放在你想要的任何地方,只要你给我它的URL,当你完成。

其他回答

如果您熟悉数据库操作,则有

选择输入更新 删除合并(如果已经存在,则输入更新)

我使用 PUT for 合并和更新,如操作,并使用 POST for 插入。

被认为是不同的,在这个“PUT”,如“GET”被认为是无效的 - 也就是说,你可以要求相同的准确的PUT多次,结果将是像你执行它只有一次。

我将描述我认为最广泛使用和最有用的条约:

当你在一个特定的URL中找到一个资源时,发生的事情就是它应该在这个URL上存储,或者沿着这些行走。

例如,当你想创建一个新流时,你可以将其输入到某些URL,但是当你想向现有流发送一个消息时,你可以将其输入到URL。

至于修改流的属性,您可以使用 PUT 或 POST. 基本上,只使用“PUT”当操作是无效的 - 否则使用 POST。

但是,请注意,并不是所有现代浏览器都支持其他HTTP字母,而不是GET或POST。

POST 用于将数据发送到服务器. PUT 用于将数据存入服务器上的资源(例如,文件)。

我看到这一点在一个脚本(第55页)从书HTTP: The Definitive Guide。

PUT 是用于创建或替换客户端所知道的 URL 的资源。

因此: PUT 仅是 CREATE 的候选人,客户在创建资源之前已经知道 URL。 /blogs/nigel/entry/when_to_use_post_vs_put 因为标题被用作资源密钥

RFC 如下:

注意: PUT 主要用于更新资源(通过将其全部替换为资源),但最近出现了使用 PATCH 来更新现有资源的动作,因为 PUT 说明它取代了整个资源。

從 REST API 設計 - 資源模型 Prakash Subramaniam of Thoughtworks

这迫使API避免多个客户更新一个资源的国家过渡问题,并且更顺利地与事件来源和CQRS相匹配。

这里是一个简单的规则:

到一个 URL 的 PUT 应该用于更新或创建可以位于该 URL 的资源。

POST to a URL should be used to update or create a resource that is located at some other ("subordinate") URL, or is not locatable via HTTP. URL 应该用于更新或创建位于某个其他(“下级”) URL 或无法通过 HTTP 找到的资源。