我读过很多地方说HTTP Patch是不幂等的。有人能解释一下为什么它是不幂等的吗?
因为根据定义,幂等方法可能会或可能不会改变资源状态,但重复请求在第一次请求后不应产生进一步的副作用。
如何通过重复PATCH请求更改资源状态?
关于这个问题有些混淆。PATCH方法不需要是幂等的,这就是重点。客户端不能像使用PUT和GET一样假设他们的PATCH请求是幂等的。
特定实现是否幂等通常取决于正在使用的修补算法(如果有)。例如,一个不使用验证当前值的差异格式的糟糕实现将不会是幂等的。
email:null
):
username:'john',email:null
}b)
username:'john'
}服务器上没有变化。要删除值,客户端应发送:
email:null
}以上两个示例均为幂等。
在另一次讨论中,如果补丁对后端集合执行“添加”之类的操作,则PATCH是不幂等的:在REST API实际场景中使用PUT和PATCH方法
{"op": "add", "path": "/-", "value": "foo"}
将[]
转换为["foo"]
第一次,然后转换为["foo", "foo"]
第二次,然后转换为["foo", "foo", "foo"]
第三次,以此类推。 - Géry Ogam