rest - 为什么 PATCH 既不安全也不幂等?

标签 rest http restful-architecture http-patch

我很难理解为什么 PATCH 在 PUT 所在的地方不安全。幂等部分 - 如果我更新资源的一个字段,该字段在更新后不会返回相同的值吗?

最佳答案

这不是安全,因为通常您不能在不更改资源的情况下安全地执行 PATCH 请求(这就是它的用途)。

那么为什么 PATCH 与 PUT 相比不是幂等?这是因为应用更改的方式很重要。如果您想更改资源的 name 属性,您可以发送类似 {"name": "foo"} 的内容作为有效负载,这确实是幂等,因为多次执行此请求都会产生相同的结果:资源 name 属性现在是“foo”。

但是 PATCH 在如何更改资源方面更为通用(查看 this 关于如何应用 JSON 补丁的定义)。例如,它也可能意味着移动资源,看起来像这样: { "op": "move", "from": "/a/b/c", "path": "/a/b/d"}。此操作显然不是幂等的,因为第二次调用会导致错误。

因此,虽然大多数 PATCH 操作可能是幂等的,但也有一些不是。

对其他答案的评论:幂等性是通过连续多次重复操作来定义的。说某事不是幂等的,因为如果在两者之间或并行执行某些其他操作,效果会有所不同,这不是一个有效的论点(如果是这种情况,一般来说没有任何操作是幂等的)。从数学上讲,幂等变换是一种产生相同结果的变换,无论您应用它的频率如何(比如将某物旋转 360 度)。当然,如果您在两者之间应用任何其他操作,则两次 360 度旋转可能会产生不同的结果。

关于rest - 为什么 PATCH 既不安全也不幂等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41390997/

相关文章:

django - 为我的 REST API 创建一个单独的应用程序或将其放入我的工作应用程序中?

api - 如何保护单页应用程序和服务器之间的 REST api?

spring - 为什么 Spring RestTemplate 在 Spring 中默认不是 Bean?

java - http 的正确 JSON 格式、正确的 JSON 转义宪章

c# - 我们可以从 SSIS 包中调用 Restful WCF 服务吗

php - GET over POST 对生产有什么好处吗?

api - 使用概念上可以包含其他资源的资源在Laravel 5.2中设计RESTful API

c# - 如何设计用于批量插入和更新的 Restful API?

node.js - 文件较小的 node.js HTTP 服务器响应速度慢得多

java - 这段代码在计算 URL 文件大小时是否存在某种瓶颈?