背景信息分析:
根据 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,当你完成。
除了其他人提出的差异之外,我想添加另一个。
在 POST 方法中,您可以在表格数据中发送身体参数
在 PUT 方法中,您必须在 x-www-form-urlencoded 中发送身体参数
标题内容类型:应用程序/x-www-form-urlencoded
因此,您不能在 PUT 方法中发送文件或多部分数据。
编辑
内容类型“应用/x-www-form-urlencoded”是不有效的发送大量的二进制数据或包含非ASCII字符的文本. 内容类型“多部分/形式数据”应用于提交包含文件、非ASCII数据和二进制数据的表格。
如果你要提交的话
文件,非ASCII数据,和二进制数据
你应该使用邮政方法。
原始服务器可以使用此 URI 创建资源
所以你使用POST和可能,但不需要PUT为资源创建. 你不需要支持两者. 对于我来说,POST是完美的足够。
如您的引用所提到的,您使用 PUT 创建没有资源分配到 IRI,您希望创建一个资源无论如何. 例如, PUT /users/123/password 通常将旧密码替换为新密码,但您可以使用它创建一个密码,如果它已经不存在(例如,由新鲜注册的用户或通过恢复被禁止的用户)。
PUT 就像向邮箱发送一封信,或者向邮箱发送一封电子邮件, PUT 就像当你把一个对象放在一个圆洞或一个地点(它有一个已知的地址)。
通过 POST,您将被发送到 QUEUE 或 COLLECTION 的地址;通过 PUT,您将被发送到项目的地址。
PUT是无效的,您可以发送请求100次,这并不重要,POST不是无效的,如果您发送请求100次,您将在邮箱中收到100个电子邮件或100个信件。
一般规则:如果您知道项目的身份或名称,请使用 PUT. 如果您希望项目的身份或名称由接收者分配,请使用 POST。
此分類上一篇
创建:
可以用 PUT 或 POST 进行如下:
更新:
只能以以下方式与PUT进行:
PUT 将资源更新为现有资源ID 作为识别器,在 / 资源 URI 或收集下。
例子: <-- 一般 - 具体 -> URI: website.example/users/john website.example - 整个网站用户 - 用户的收集 john - 收集的项目,或资源 URI:website.example/users/john/posts/23 website.example - 整个网站用户 - 用户的收集 john - 收集的项目,或资源帖子 - 收集的帖子 john 23
当你使用POST时,你总是提到收藏,所以每当你说:
POST /users HTTP/1.1
POST /users/john HTTP/1.1
它会工作,但你说你想在用户收藏下添加一个资源。
PUT /users/john HTTP/1.1
让我们来介绍一下特区的一些重要部分:
邮件
因此,它在收藏中创造了一个新的资源。
皮特
参考: