我在Rails应用程序中使用PUT请求。现在,浏览器实现了一个新的HTTP动词PATCH。所以,我想知道PATCH和PUT请求之间的主要区别是什么,以及我们什么时候应该使用其中一个或另一个。


当前回答

类比解释

我买了辆阿尔法罗密欧。它的引擎有缺陷(真令人惊讶)

有两种方法可以解决这个问题:

更换整辆车(放请求),或者 只需更换有缺陷的引擎(补丁请求)-即。“修补”汽车,而不是完全更换它。


最后我以相当大的损失把汽车卖回给经销商。不用为命名这个品牌而道歉。我买意大利垃圾活该。

其他回答

把: 如果我想更新我的名字,那么我发送一个put请求:

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

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

补丁: 另一方面,补丁请求说:只指定你需要更新的数据,它不会影响或改变其他数据。 所以不需要再次发送所有值。我只需要改名字吗?只需要在补丁请求中指定第一个。

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

把= > 如果用户可以更新记录的全部或部分,则使用PUT(用户控制更新内容)

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

补丁= > 如果用户只能更新部分记录,比如一个电子邮件地址(应用程序控制可以更新的内容),则使用PATCH。

PATCH /users/123
[description of changes]

为什么补丁

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

PATCH说明

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

PATCH是一种方法,它所包含的实体包含一组指令,描述如何修改当前驻留在原始服务器上的资源以产生新版本。

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

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

PUT和PATCH方法在本质上是相似的,但有一个关键的区别。

PUT -在PUT请求中,所包含的实体将被认为是驻留在服务器上的资源的修改版本,它将被这个修改的实体所取代。

PATCH -在PATCH请求中,封闭的实体包含一组指令,说明驻留在服务器上的实体将如何被修改以产生一个新的版本。

在进行更新时,PUT over PATCH有一些限制。使用PUT要求我们指定所有属性,即使我们只想更改一个属性。 但是如果我们使用PATCH方法,我们可以只更新我们需要的字段,而不需要提及所有的字段。PATCH不允许修改数组中的值,也不允许删除属性或数组项。

类比解释

我买了辆阿尔法罗密欧。它的引擎有缺陷(真令人惊讶)

有两种方法可以解决这个问题:

更换整辆车(放请求),或者 只需更换有缺陷的引擎(补丁请求)-即。“修补”汽车,而不是完全更换它。


最后我以相当大的损失把汽车卖回给经销商。不用为命名这个品牌而道歉。我买意大利垃圾活该。