jsonpatch-js icon indicating copy to clipboard operation
jsonpatch-js copied to clipboard

PATCH request should be atomic

Open risseraka opened this issue 10 years ago • 1 comments

Per HTTP PATCH spec

 Note that the HTTP PATCH method is atomic, as per [RFC5789].
   Therefore, the following patch would result in no changes being made
   to the document at all (because the "test" operation results in an
   error):

   [
     { "op": "replace", "path": "/a/b/c", "value": 42 },
     { "op": "test", "path": "/a/b/c", "value": "C" }
   ]

Ref: http://tools.ietf.org/html/rfc6902#section-5

In other words, none of a patch's operations should be applied if any one of them fails.

> var obj = {};
undefined

> jsonpatch.apply(obj, [
  {op: 'add', path: '/foo', value: 'bar'}, 
  {op: 'remove', path: '/baz'}
]);
PatchConflictError: Value at baz does not exist // OK

> obj
{ foo: 'bar' }  // NOT OK

jsonpatch.apply should perhaps test every operations before applying them.

What do you think?

risseraka avatar Feb 01 '15 14:02 risseraka

You are free to make a copy of the object prior to applying the set of operations. The README disclaims this: Note: at this time, all operations are applied in-place.

bruth avatar Feb 02 '15 01:02 bruth