No JSON Patch, cada operação vê o documento resultante da anterior. Em um array, uma remoção desloca os índices. Um patch que assume os índices iniciais pode alterar outro elemento ou falhar no meio.

[
  { "op": "test", "path": "/items/0", "value": "a" },
  { "op": "remove", "path": "/items/0" },
  { "op": "replace", "path": "/items/1", "value": "x" }
]

Aplique ao documento {"items":["a","b","c"]}. O resultado é {"items":["b","x"]}. Depois da remoção, o índice 1 aponta para "c". Repita com {"items":["a","b"]}. A substituição falha porque o índice 1 deixou de existir. No método HTTP PATCH, a aplicação do conjunto é atômica. O servidor não deve deixar visível a remoção parcial.

Proteja a versão que o cliente leu

A operação test verifica um valor específico. Um cliente que monta o patch a partir de uma representação inteira pode enviar também If-Match com o ETag forte recebido. Se outra edição mudou o validador, a condição impede a gravação. Teste separadamente o ETag desatualizado e o caminho inválido para confirmar que ambos preservam o estado original.

RFC 6902, JSON Patch · RFC 5789, método PATCH

Leia também: ETag forte e fraco em If-Match e If-None-Match