背景信息分析:

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

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

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

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

我的问题:

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


当前回答

使用 POST 创建,而 PUT 更新,这就是 Ruby on Rails 如何做到这一点。

PUT    /items/1      #=> update
POST   /items        #=> create

其他回答

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

POST 也用于更新记录。

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

PUT 也用于更新资源

除了其他人提出的差异之外,我想添加另一个。

在 POST 方法中,您可以在表格数据中发送身体参数

在 PUT 方法中,您必须在 x-www-form-urlencoded 中发送身体参数

标题内容类型:应用程序/x-www-form-urlencoded

因此,您不能在 PUT 方法中发送文件或多部分数据。

编辑

内容类型“应用/x-www-form-urlencoded”是不有效的发送大量的二进制数据或包含非ASCII字符的文本. 内容类型“多部分/形式数据”应用于提交包含文件、非ASCII数据和二进制数据的表格。

如果你要提交的话

文件,非ASCII数据,和二进制数据

你应该使用邮政方法。

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

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

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

PUT 就像向邮箱发送一封信,或者向邮箱发送一封电子邮件, PUT 就像当你把一个对象放在一个圆洞或一个地点(它有一个已知的地址)。

通过 POST,您将被发送到 QUEUE 或 COLLECTION 的地址;通过 PUT,您将被发送到项目的地址。

PUT是无效的,您可以发送请求100次,这并不重要,POST不是无效的,如果您发送请求100次,您将在邮箱中收到100个电子邮件或100个信件。

一般规则:如果您知道项目的身份或名称,请使用 PUT. 如果您希望项目的身份或名称由接收者分配,请使用 POST。

此分類上一篇

总体:

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 创建它,同时指定名称。