Marcin Warpechowski (@warpech)
8th Munich Node.js User Group Meetup
April 11th, 2013


{
"name": {
"first": "Marcin",
"last": "Warpechowski"
}
"pets": []
}
Patch:
{"op": "add", "path": "/pets/0", "value": "dog"}{
"name": {
"first": "Marcin",
"last": "Warpechowski"
}
"pets": ["dog"]
}
Patch:
{"op": "add", "path": "/pets/0", "value": "dog"}
{"op": "test", "path": "/a/b/c", "value": "foo"}
{"op": "remove", "path": "/a/b/c"}
{"op": "add", "path": "/a/b/c", "value": ["foo", "bar"]}
{"op": "replace", "path": "/a/b/c", "value": 42}
{"op": "move", "from": "/a/b/c", "path": "/a/b/d"}
{"op": "copy", "from": "/a/b/d", "path": "/a/b/e"}
PATCH /my/data HTTP/1.1
Host: example.org
Content-Length: 318
Content-Type: application/json-patch+json
If-Match: "abc123"
[
{"op": "test", "path": "/a/b/c", "value": "foo"},
{"op": "remove", "path": "/a/b/c"},
{"op": "add", "path": "/a/b/c", "value": ["foo", "bar"]},
{"op": "replace", "path": "/a/b/c", "value": 42},
{"op": "move", "from": "/a/b/c", "path": "/a/b/d"},
{"op": "copy", "from": "/a/b/d", "path": "/a/b/e"}
]
RFCs
JSON Patch:
http://tools.ietf.org/html/rfc6902
JSON Pointer:
http://tools.ietf.org/html/rfc6901
HTTP PATCH:
http://tools.ietf.org/html/rfc5789
Implementations
JS (Node.js):
https://npmjs.org/package/json-patch
JS (browser & Node.js):
https://github.com/Starcounter-Jack/Fast-JSON-Patch
More reading
http://www.mnot.net/blog/2012/09/05/patch
Photo credits
http://www.flickr.com/photos/ifl/5324565888/
http://commons.wikimedia.org/wiki/File:Dekotora.jpg
