2015-11-13 8 views
3

RFC 6902中的删除操作允许您从JSON对象中的数组中删除元素,但也会更改所有其他元素的数组索引。在REST服务中使用PATCH和RFC 6902从阵列中删除对象。你怎么知道你正在删除正确的元素?

如果您使用GET检索记录,然后使用PATCH从数组中删除元素,是否存在其他人可能已删除该数组中其他元素的风险,这可能会更改项目的索引你想删除?难道这不会导致您意外地从数组中删除错误的项目?

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

回答

4

您正在描述并发问题。您应该对ETags使用乐观并发方法来执行条件PATCH操作。

http://fideloper.com/etags-and-optimistic-concurrency-control

基本上,第一客户端获取的资源的表示与一个ETag,这将是该内容的校验和。当您想要执行PATCH操作时,请将If-Match HTTP标头与先前的ETag附加为值。如果数据在读取后未发生变化,服务器将接受该操作并返回HTTP 200.否则,数据将发生更改,服务器将返回HTTP 412先决条件失败,表明请求尝试修改的数据已发生更改。