背景信息分析:

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

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

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

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

我的问题:

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


当前回答

我喜欢这个建议,从RFC 2616的定义PUT:

我解释了这一点,以及PUT的身份要求,这意味着:

POST 很好在收藏下创建新的对象(而创建不需要是同效的) PUT 很好在更新现有对象(而更新需要是同效的) POST 也可以用于对现有对象的非同效的更新(特别是,改变对象的一部分,而不说明整个事物 - 如果你想到它,创建一个新成员的收藏实际上是

其他回答

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

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

大多数时候,你会用它们如下:

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”框,那么您正在击败目的。

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

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

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

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

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

POST 意思是“创建新”如在“这里是创建用户的输入,为我创建它”。

PUT 的意思是“输入,如果已经存在,取代”如“这里是用户数据5”。

您 POST 到 example.com/users 因为您还不知道用户的 URL,您希望服务器创建它。

您可以访问 example.com/users/id 因为您想要更换/创建一个特定的用户。

与相同数据两次发布意味着创建两个相同的用户与不同的ID。 与相同数据两次发布会创建用户的第一个,并更新到相同状态的第二次(没有变化)。 因为你结束相同状态后一个 PUT 无论你执行多少次,它被说是“平等强大”每次 - idempotent. 这是有用的自动退休

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

POST 也用于更新记录。

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

PUT 也用于更新资源