XPOST和XPUT的区别

The difference between XPOST and XPUT

我正在学习Elasticsearch,我发现XPOSTXPUT在'update'或'replace'文档中大体相同。他们都改变了字段值。

curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
{
  "name": "Jane Doe"
}'

curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
{
  "doc": { "name": "Jane Doe" }
}'

所以他们都把名字字段改成了"Jane Doe"。我想知道在上述情况下 XPOSTXPUT 之间有什么区别。

首先,-X 是 curl 的标志。 请参阅手册页中的 -X。它与 --request 相同。您可以指定要使用的 HTTP 方法(POST、GET、PUT、DELETE 等) http://curl.haxx.se/docs/manpage.html

关于POST和PUT,它们是HTTP方法或"verbs"。

ElasticSearch 为我们提供了 REST API。根据 REST 惯例,POST 用于创建,PUT 用于更新记录。

请看: http://www.restapitutorial.com/lessons/httpmethods.html

这两个命令完全不一样。第一个(PUT)将更新完整文档,而不仅仅是您发送的字段。

第二个(POST)将进行部分更新并且只更新您发送的字段,而不触及已经存在的其他字段文档。

HTTP 放置:

PUT 将文件或资源放在特定的 URI 中,并且恰好放在该 URI 中。如果该 URI 中已有文件或资源,PUT 将替换该文件或资源。如果那里没有文件或资源,PUT 会创建一个。 PUT 是幂等的,但矛盾的是 PUT 响应不可缓存。

PUT 的 HTTP 1.1 RFC 位置

HTTP POST:

POST 将数据发送到特定的 URI,并期望该 URI 处的资源处理请求。此时 Web 服务器可以确定如何处理指定资源上下文中的数据。 POST 方法不是幂等的,但是 POST 响应是可缓存的,只要服务器设置适当的 Cache-Control 和过期 headers.

官方 HTTP RFC 指定 POST 为:

现有资源的注释; 向公告板、新闻组、邮件列表或类似的文章组发布消息; 向 data-handling 进程提供数据块,例如提交表单的结果; 通过附加操作扩展数据库。 POST

的 HTTP 1.1 RFC 位置

POST 和 PUT 之间的区别:

RFC 本身解释了核心区别:

POST 和 PUT 请求之间的根本区别体现在 Request-URI 的不同含义上。 POST 请求中的 URI 标识将处理封闭实体的资源。该资源可能是一个 data-accepting 进程、某个其他协议的网关或接受注释的单独实体。相反,PUT 请求中的 URI 标识包含在请求中的实体——用户代理知道 URI 是什么,服务器不得尝试将请求应用于其他资源。如果服务器希望将请求应用于不同的 URI,它必须发送 301(永久移动)响应;然后用户代理可以自己决定是否重定向请求。 使用正确的方法,无关紧要:

REST ROA 与 SOAP 相比的一个好处是,在使用 HTTP REST ROA 时,它鼓励正确使用 HTTP verbs/methods。因此,例如,当您想在该确切位置创建资源时,您只会使用 PUT。而且您永远不会使用 GET 来创建或修改资源。

如果对你有帮助就点个赞吧:)

PUT 方法是幂等的,所以如果您使用 put 方法访问负载,它只会在第一次创建,如果您一次又一次地访问相同的请求,它不会创建新记录,它只会更新之前创建的记录. 另一方面,如果您使用 POST 方法命中有效载荷,您将创建相同有效载荷的条目数。