XPOST和XPUT之间的区别

时间:2016-07-27 10:59:29

标签: rest post curl elasticsearch put

我正在学习Elasticsearch,我发现XPOSTXPUT在更新'时通常是相同的。或者'替换'文档。它们都会改变字段值。

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之间的区别。

4 个答案:

答案 0 :(得分:6)

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

第二个(POST)会执行部分更新,只会更新您要发送的字段,而不会触及文档中已存在的其他字段。

答案 1 :(得分:2)

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

关于POST和PUT,它们是HTTP方法或“动词”。

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

请参阅: http://www.restapitutorial.com/lessons/httpmethods.html

答案 2 :(得分:2)

HTTP PUT:

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

PUT的HTTP 1.1 RFC位置

HTTP POST:

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

官方HTTP RFC指定POST为:

现有资源的注释; 在公告栏,新闻组,邮件列表或类似文章组中发布消息; 提供数据块,例如提交表单的结果,数据处理过程; 通过追加操作扩展数据库。 POST的HTTP 1.1 RFC位置

POST和PUT之间的区别:

RFC本身解释了核心差异:

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

REST ROA与SOAP的一个好处是,当使用HTTP REST ROA时,它鼓励正确使用HTTP谓词/方法。因此,例如,当您想要在该确切位置创建资源时,您将仅使用PUT。而且你永远不会使用GET来创建或修改资源。

答案 3 :(得分:0)

PUT方法是幂等的,因此如果您使用put方法命中有效负载,它将仅第一次创建,并且如果您一次又一次命中相同的请求,它将不会创建新记录,它只会更新以前创建的记录。 另一方面,如果您多次使用POST方法击中有效负载,则将创建相同有效负载的条目数。