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

Removing objects from an array using PATCH with RFC 6902 in a REST service. How do you know you are deleting the correct element?

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

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

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

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

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

基本上,首先客户端获取资源的表示,其中包含一个 ETag,该 ETag 是内容的校验和。当你想执行 PATCH 操作时,你附加一个 If-Match HTTP header 并以先前的 ETag 作为值。如果数据在您读取后没有改变,服务器将接受操作和 return HTTP 200。否则,如果数据发生变化,服务器将 return HTTP 412 Precondition Failed 指示数据正在尝试修改的请求已更改。