Ton*_*ent 14 rest http restful-architecture http-patch
我无法理解为什么PATCH在PUT不安全的地方.也就是幂等部分 - 如果我更新资源的一个字段,那么该字段在更新后是否会返回相同的值?
C. *_*Doe 15
这是不安全的,因为通常你不能在不改变资源的情况下安全地执行PATCH请求(这就是它的用途).
那么为什么与PUT相比,PATCH不是幂等的?这是因为您应用更改的方式很重要.如果您想要更改name资源的属性,您可能会发送类似{"name": "foo"}有效负载的内容,这确实是幂等的,因为执行此请求任意次都会产生相同的结果:资源name属性现在是"foo".
但PATCH是如何更改的资源更普遍(查看这个关于如何应用一个JSON补丁定义).例如,它也可能意味着移动资源,看起来像这样:{ "op": "move", "from": "/a/b/c", "path": "/a/b/d" }.此操作显然不是幂等的,因为第二次调用会导致错误.
因此,虽然大多数PATCH操作可能是幂等的,但有一些不是.
关于其他答案的一点评论:通过连续多次重复操作来定义幂等性.说某些东西不是幂等的,因为如果在中间或并行执行某些其他操作,效果是不同的,那么这不是一个有效的参数(如果是这种情况,通常操作不会是幂等的).在数学上,幂等变换是产生相同结果的变换,无论你多么频繁地应用它(比如旋转360度).当然,如果您在其间应用任何其他操作,则两次360度旋转可能会产生不同的结果.
PATCH 更改资源属性。更改可能需要属性的具体先前值,这使其成为非幂等的。
From Name=John to Name=Gargantua.
Run Code Online (Sandbox Code Playgroud)
重复应用后,名称将是 Gargantua 并且补丁将失败,因为它要求名称在更改前为“John”
"from Name=John"
我最近开始研究 Patch 是否是幂等的,在阅读了 JSON 补丁格式后,我明白如果使用 Patch 方法应用添加操作,则完全有可能请求是非幂等的,因为它可以将新值添加到如果多次发出相同的请求,则为现有资源。
{ "op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ] }
| 归档时间: |
|
| 查看次数: |
6065 次 |
| 最近记录: |