我在Rails应用程序中使用PUT请求。现在,浏览器实现了一个新的HTTP动词PATCH。所以,我想知道PATCH和PUT请求之间的主要区别是什么,以及我们什么时候应该使用其中一个或另一个。
当前回答
Differences between PUT and PATCH The main difference between PUT and PATCH requests is witnessed in the way the server processes the enclosed entity to update the resource identified by the Request-URI. When making a PUT request, the enclosed entity is viewed as the modified version of the resource saved on the original server, and the client is requesting to replace it. However, with PATCH, the enclosed entity boasts a set of instructions that describe how a resource stored on the original server should be partially modified to create a new version.
第二个区别是当涉及到等幂的时候。HTTP PUT被称为幂等的,因为它总是在每次发出几个请求后产生相同的结果。另一方面,HTTP PATCH基本上被认为是非幂等的。然而,根据执行的位置,可以使它成为幂等的。
其他回答
类比解释
我买了辆阿尔法罗密欧。它的引擎有缺陷(真令人惊讶)
有两种方法可以解决这个问题:
更换整辆车(放请求),或者 只需更换有缺陷的引擎(补丁请求)-即。“修补”汽车,而不是完全更换它。
最后我以相当大的损失把汽车卖回给经销商。不用为命名这个品牌而道歉。我买意大利垃圾活该。
Put和Patch方法类似。但是在rails中有不同的方法 如果我们想要更新/替换整个记录,那么我们必须使用Put方法。 如果我们想要更新特定的记录使用补丁方法。
根据HTTP术语,PUT请求就像一个数据库更新语句。 PUT -用于修改现有资源(先前post)。另一方面,PATCH请求用于更新现有资源的某些部分。
例如:
客户详细信息:
// This is just a example.
firstName = "James";
lastName = "Anderson";
email = "email@domain.com";
phoneNumber = "+92 1234567890";
//..
当我们想要更新到整个记录?我们必须使用Http PUT动词。
如:
// Customer Details Updated.
firstName = "James++++";
lastName = "Anderson++++";
email = "email@Updated.com";
phoneNumber = "+92 0987654321";
//..
另一方面,如果我们只想更新记录的一部分而不是整个记录,那么使用Http PATCH谓词。 如:
// Only Customer firstName and lastName is Updated.
firstName = "Updated FirstName";
lastName = "Updated LastName";
//..
Put和post:
当使用PUT请求时,我们必须发送所有参数,如firstName, lastName, email, phoneNumber,其中在补丁请求中只发送我们想要更新的参数,它不会影响或改变其他数据。
详情请访问:https://fullstack-developer.academy/restful-api-design-post-vs-put-vs-patch/
把: 如果我想更新我的名字,那么我发送一个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的信息
推荐文章
- 什么是HTTP“主机”报头?
- 哪个HTTP状态代码表示“尚未准备好,稍后再试”?
- 如何阻止恶意代码欺骗“Origin”报头来利用CORS?
- 为什么说“HTTP是无状态协议”?
- 我需要HTTP GET请求的内容类型报头吗?
- 我如何简单地从我最新的git提交创建一个补丁?
- 如何让Chrome允许混合内容?
- 正确的方式删除cookies服务器端
- REST DELETE真的是幂等的吗?
- 了解Chrome网络日志“停滞”状态
- 用户代理字符串可以有多大?
- 什么是接受* HTTP报头q=0.5 ?
- HTTP状态码200(缓存)和状态码304之间有什么区别?
- HTTP POST返回错误:417“期望失败。”
- 什么是HTTP中的“406-不可接受的响应”?