我正在学习Elasticsearch
,我发现XPOST
和XPUT
在更新'时通常是相同的。或者'替换'文档。它们都会改变字段值。
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"。我想知道上述背景下XPOST
和XPUT
之间的区别。
答案 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方法击中有效负载,则将创建相同有效负载的条目数。