jsonpatch-js
jsonpatch-js copied to clipboard
PATCH request should be atomic
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?
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.