背景信息分析:

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

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

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

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

我的问题:

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


当前回答

Ruby on Rails 4.0 将使用“PATCH”方法而不是 PUT 进行部分更新。

RFC 5789 讲述了 PATCH (自 1995 年以来):

一个新的方法是必要的,以改善互动性和防止错误. PUT 方法已经定义,以重新编写一个资源与一个完整的新体,并且不能重新使用,以进行部分变更。 否则, proxies 和 cache,甚至客户端和服务器,可能会被混淆的结果操作。 POST 已经使用,但没有广泛的互动性(

“Edge Rails: PATCH 是更新的新主要 HTTP 方法,”它解释。

其他回答

REST 是一个非常高级别的概念,事实上,它甚至没有提到 HTTP!

如果你有任何疑问如何在HTTP中实施REST,你总是可以看看原子出版协议(AtomPub)的规格. AtomPub是由许多HTTP和REST灯台开发的HTTP的RESTful网页服务的标准,其中一些来自Roy Fielding,REST的发明家和(共同)HTTP的发明家。

事实上,你甚至可以直接使用 AtomPub. 虽然它来自博客社区,它没有任何限制博客: 这是一个通用协议,以便通过 HTTP 与自愿的(自愿的)资源集合相互作用。

以下是 AtomPub 對資源創造的說法(第 9.2 節):

要将会员添加到集合中,客户将 POST 请求发送到集合的 URI。

总体:

PUT 和 POST 都可以用于创建。

你必须问“你在做什么?”来区分你应该使用什么,假设你正在设计一个API来提出问题,如果你想使用POST,那么你会这样做一个问题列表,如果你想使用PUT,那么你会这样做一个特定的问题。

你不需要支持PUT和POST。

一些考虑:

我写了以下,作为关于此问题的另一个答案的一部分:

POST: 用于修改和更新资源 POST / 问题/<existing_question> HTTP/1.1 主机: www.example.com/ 注意下列是错误: POST / 问题/<new_question> HTTP/1.1 主机: www.example.com/ 如果 URL 尚未创建,您不应该使用 POST 创建它,同时指定名称。

上面和下面的所有答案都是正确的,只是一个小(重要)笔记. 所有这些“句子”都是建议,他们的效果没有执行. 服务器是免费的做他们想要什么,这意味着写与GET或服务器想要什么。

PHP 例如,阅读 $_POST 和 $_GET. 它完全取决于程序员将通过从这些序列中阅读变量进行什么。

POST: 使用它来创建新的资源. 它类似于 INSERT (SQL 声明) 具有自动增强 ID. 在回复部分中,它包含一个新生成的 ID。

POST 也用于更新记录。

PUT:使用它来创建一个新的资源,但在这里我知道身份密钥,它就像INSERT(SQL声明),在那里我提前知道身份密钥。

PUT 也用于更新资源

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

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

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

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

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

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