RFC 6902中的remove操作允许您从JSON对象中的数组中删除元素,但也会更改所有其他元素的数组索引。
如果使用GET检索记录,然后使用PATCH从数组中删除元素,则不存在其他人可能删除该数组中的其他元素的风险,这可能会更改该数组的索引要删除的项目?这不能导致你不小心从数组中删除错误的项目吗?
我是否错误地使用了这个,或者使用PATCH从数组中删除元素需要某种乐观锁定才能可靠地运行?
答案 0 :(得分:4)
您正在描述并发问题。您应该使用ETag的乐观并发方法来执行条件PATCH操作。
http://fideloper.com/etags-and-optimistic-concurrency-control
基本上,首先客户端使用ETag获取资源的表示,ETag将是内容的校验和。如果要执行PATCH操作,请将If-Match
HTTP标头与前一个ETag作为值附加。如果数据自您读取后没有改变,服务器将接受操作并返回HTTP 200.否则数据发生更改,服务器将返回HTTP 412 Precondition Failed,指示请求尝试修改的数据自更改以来