当前位置: 首页 > 知识库问答 >
问题:

PATCH和PUT请求的主要区别是什么?

齐阳
2023-03-14

我在Rails应用程序中使用了一个PUT请求。现在,浏览器已经实现了一个新的HTTP动词,补丁。因此,我想知道PATCH和PUT请求之间的主要区别是什么,以及何时应该使用其中一个。

共有3个答案

邢项禹
2023-03-14

put:
如果我想先更新我的姓名,然后发送put请求:

{ "first": "Nazmul", "last": "hasan" } 

但是使用put请求有一个问题:当我想发送put请求时,我必须发送所有两个参数,即第一个和最后一个(而我只需要更新第一个),因此必须使用put请求再次发送它们。

另一方面,补丁:
补丁请求说:只指定您需要更新数据,它不会影响或更改其他数据。
所以不需要再次发送所有值。我只需要更改first名称吗?好吧,在补丁请求中指定first就足够了。

沈高峻
2023-03-14

我在谷歌上花了几个小时,在这里找到了答案

放置=

PUT /users/123/email
new.email@example.org

补丁=

PATCH /users/123
[description of changes]

为什么补丁

PUT方法需要更多的带宽或处理全部资源而不是部分。因此引入了PATCH来减少带宽。

补丁说明

补丁是一种不安全的方法,也不是幂等的,并且允许对其他资源进行完全和部分更新以及副作用。

补丁是一种方法,其中包含一组指令,描述如何修改当前驻留在源服务器上的资源以生成新版本。

PATCH /users/123
[
  { "op": "replace", "path": "/email", "value": "new.email@example.org" }
]

这里有关于put和patch的更多信息

王泓
2023-03-14

HTTP动词可能是HTTP协议中最神秘的事情之一。它们存在,而且有很多,但它们为什么存在?

Rails似乎希望支持许多动词,并添加一些web浏览器本机不支持的动词。

以下是http动词的详尽列表:http://annevankesteren.nl/2007/10/http-methods

这里有来自官方RFC的HTTP补丁:https://datatracker.ietf.org/doc/rfc5789/?include_text=1

PATCH方法请求将请求实体中描述的一组更改应用于请求-URI标识的资源。更改集以称为“补丁文档”的格式表示,该html" target="_blank">格式由媒体类型标识。如果请求-URI不指向现有资源,服务器可以创建新资源,具体取决于补丁文档类型(是否可以在逻辑上修改空资源)和权限等。

PUT和PATCH请求之间的区别反映在服务器处理封闭实体以修改请求URI标识的资源的方式中。在PUT请求中,封闭实体被认为是存储在源服务器上的资源的修改版本,客户端请求替换存储的版本。但是,使用PATCH,封闭实体包含一组指令,描述如何修改当前驻留在源服务器上的资源以生成新版本。PATCH方法会影响请求URI标识的资源,也可能对其他资源产生副作用;即,PATCH的应用程序可能会创建新资源或修改现有资源。

据我所知,PATCH动词并没有像在rails应用程序中那样使用...据我所知,RFC补丁动词应该用于发送补丁指令,例如在两个文件之间进行差异时。您发送的补丁可能比重新发送整个实体小得多,而不是再次发送整个实体。

想象一下,你想要编辑一个巨大的文件。编辑3行。您只需发送差异,而无需将文件发回。另一方面,发送补丁请求可以用于异步合并文件。版本控制系统可能会使用补丁动词远程更新代码。

另一个可能的用例与非关系型数据库有关,它可以存储文档。假设我们使用JSON结构将数据从服务器来回发送到客户端。如果我们想删除一个字段,我们可以使用类似于mongoDB中$unset的语法。实际上,mongob中用于更新文档的方法可能用于处理json补丁。

以这个例子为例:

db.products.update(
   { sku: "unknown" },
   { $unset: { quantity: "", instock: "" } }
)

我们可以这样做:

PATCH /products?sku=unknown
{ "$unset": { "quantity": "", "instock": "" } }

最后,但并非最不重要的一点是,人们可以随心所欲地谈论HTTP动词。只有一个真相,而真相在RFC中。

 类似资料:
  • HTTP协议中的PUT、POST和PATCH方法有什么区别?

  • Flink被比作Spark,在我看来,这是一个错误的比较,因为它将窗口事件处理系统与微批处理进行了比较;同样地,对我来说,将Flink与Samza进行比较也没有那么大的意义。在这两种情况下,它比较了实时事件处理策略和批处理事件处理策略,即使在Samza的情况下“规模”较小。但我想知道Flink与Storm的比较如何,它在概念上似乎更相似。 我发现这张(幻灯片#4)记录了Flink的“可调延迟”这一

  • 本文向大家介绍Kafka和Flume之间的主要区别是什么?相关面试题,主要包含被问及Kafka和Flume之间的主要区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 答:Kafka和Flume之间的主要区别是: 工具类型 Apache Kafka——Kafka是面向多个生产商和消费者的通用工具。 Apache Flume——Flume被认为是特定应用程序的专用工具。 复制功能 Apache

  • 问题内容: 网上似乎充满了Velocity和FreeMarker之间的比较,并且它们似乎相当等效。但是,StringTemplate和FreeMarker之间似乎几乎没有比较! 那么,StringTemplate和FreeMarker之间的主要区别是什么? 我对它们的用法是仅生成HTML页面。在这两种方法中,我曾期望FreeMarker更合适,功能更强大,因为这似乎是更常见的一种- 但快速浏览一下

  • 问题内容: 创建表: 结果: 请让我知道Varchar2和char有什么区别?我们什么时候都使用? 问题答案: 显示差异的简单示例: CHAR对于字符长度始终固定的表达式很有用,例如美国各州的邮政编码,例如CA,NY,FL,TX

  • 问题内容: 我想问一下您最喜欢JS的软件包管理器是什么?我看到了一些关于yarn和npm的文章。但是我不确定有什么对我更好。我刚刚开始学习JS。 现在,yarn和npm之间的差异对我来说就像可乐品牌之间的差异。 问题答案: 有时候我们只有一个,但是解决依赖性和缓存问题太多,以至于另一个工具诞生了()。通常,它使用本地缓存来解决依赖关系,例如,在运行几乎总是在同一环境中运行的CI作业时,这非常关键,