在 REST 服务中使用 PATCH 和 RFC 6902 从数组中删除对象。你怎么知道你正在删除正确的元素?

Chr*_*s B 4 rest concurrency json http rfc

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

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

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

vto*_*ola 5

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

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

基本上,客户端首先使用 ETag 获取资源的表示,该 ETag 将是内容的校验和。当您想要执行 PATCH 操作时,您可以附加一个If-Match带有先前 ETag 作为值的HTTP 标头。如果数据在你读取之后没有改变,服务器将接受操作并返回 HTTP 200。如果数据改变了,服务器将返回 HTTP 412 Precondition Failed 表明请求试图修改的数据已经改变了.