elasticsearch,put,Rest,Post,Curl,elasticsearch,Put" /> elasticsearch,put,Rest,Post,Curl,elasticsearch,Put" />

Rest XPOST和XPUT之间的区别

Rest XPOST和XPUT之间的区别,rest,post,curl,elasticsearch,put,Rest,Post,Curl,elasticsearch,Put,我正在学习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"

我正在学习
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
之间有什么区别。

首先,-X是curl的标志。 请参见手册页中的-X。它与--request相同。您可以指定要使用的HTTP方法(POST、GET、PUT、DELETE等)

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

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

请参阅:

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

第二个(带有
POST
)将执行部分更新,只更新您正在发送的字段,而不涉及文档中已经存在的其他字段。

HTTP PUT:

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

用于PUT的HTTP 1.1 RFC位置

HTTP POST:

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

官方HTTP RFC指定POST为:

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

POST和PUT之间的区别:

RFC本身解释了核心差异:

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


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

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

Elasticsearch教程使用
XPOST
更新文档,如@daiyue请参见手册页中的-X。它与--request相同。您可以指定使用ie POST、GET、PUT、DELETE等的HTTP方法。请注意,这是因为他使用的是update API。ElasticSearch文档是不可变的,不能更改,只能替换。更新API必须遵守相同的规则。从外部看,似乎我们正在局部更新一个文档。然而,在内部,更新API只是管理相同的检索更改重新索引过程。从用户的角度来看,“更改”或“替换”没有区别。通常,用户希望用一些新值“更新”文档,而ES在内部处理这一问题的方式对用户来说并不重要。完全更新和部分更新实际上都会替换底层文档并增加版本,因此在这里区分PUT和POST并不重要。但是,POST动词确实只用于
\u update
端点,并且您的观点是有效的。