在REST服务中使用带有RFC 6902的PATCH从阵列中删除对象。你怎么知道你正在删除正确的元素?

时间:2015-11-13 16:56:21

标签: json rest http concurrency rfc

RFC 6902中的remove操作允许您从JSON对象中的数组中删除元素,但也会更改所有其他元素的数组索引。

如果使用GET检索记录,然后使用PATCH从数组中删除元素,则不存在其他人可能删除该数组中的其他元素的风险,这可能会更改该数组的索引要删除的项目?这不能导致你不小心从数组中删除错误的项目吗?

我是否错误地使用了这个,或者使用PATCH从数组中删除元素需要某种乐观锁定才能可靠地运行?

1 个答案:

答案 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,指示请求尝试修改的数据自更改以来