Mark,

The WG's reasoning, as stated in your message below, seems flawed.
Messages since your last communication on this matter have shown:

1) The ambiguity around arrays makes the patch format unsuitable for
common concurrent editing algorithms.
2) The ambiguity is likely to occur in the real world, for a couple of
different reasons.
3) It's not possible to tell whether a JSON Pointer document is
syntactically correct in isolation.

Additionally, you raised this point in your message below:
>
> the patch author already has to understand the semantics of the document 
> they're patching

That claim does not seem to be well-justified, and it could be
meaningless to the person implementing patch software (for example:
https://github.com/sayrer/json-sync).

This issue is a problem in practice, and it's a problem in theory as
well. JSON-Patch messages aren't sufficiently self-descriptive, so
they aren't appropriate for use in a RESTful system.

A response containing technical reasoning seems in order, since the
points raised by myself and others on this issue are unrelated to the
WG's previous thinking.

- Rob

On Sun, Dec 16, 2012 at 9:41 PM, Mark Nottingham <m...@mnot.net> wrote:
> Robert,
>
> This was discussed extensively in the Working Group.
>
> The root of the issue was that some people reflexively felt that this was 
> necessary, but upon reflection, we decided it wasn't; although it seems 
> "natural" to some, especially those coming from a static language background, 
> it didn't provide any utility.
>
> You might argue that someone who (for example) adds to "/foo/1" in the 
> mistaken belief that it's an array, when in fact it's an object, will get 
> surprising results. That's true, but if we were to solve this problem, that 
> person would still need to understand the underlying semantics of "foo" to do 
> anything useful to it -- and I'm not hearing anyone complain about that (I 
> hope).
>
> Put another way -- do you really think that people PATCHing something as if 
> it's an array (when in fact it's an object) is a significant, real-world 
> problem, given that the patch author already has to understand the semantics 
> of the document they're patching? I don't, and the WG didn't either.
>
> Regards,
>
>
> On 17/12/2012, at 3:36 PM, Robert Sayre <say...@gmail.com> wrote:
>
>> The cost of fixing it seems low, either by changing the path syntax of
>> JSON pointer or changing the names of operations applied to arrays.
>> Array-like objects are common enough in JavaScript to make this a
>> worry. The other suggestions either assume a particular policy for
>> concurrent edits or require more machinery (test operation etc).
>> Wouldn't it be simpler to make the patch format more precise?
>>
>> - Rob
>>
>> On Sun, Dec 16, 2012 at 4:33 PM, Matthew Morley <m...@mpcm.com> wrote:
>>> I am usually lurking and struggling to keep up with these posts. But, I
>>> concur with James, this really is a non-issue in practice.
>>>
>>> The JSON Pointer expresses a path down a JSON object to a specific context.
>>> The Patch expresses a change within or to that context.
>>> Everything about the both standards is about that end context.
>>>
>>> If you want to confirm the type of the context before applying a patch, this
>>> should probably be part of a test operation. I'm not sure if this is
>>> possible at this point (?), but that is where the logic should exist.
>>>
>>>
>>>
>>> On Sun, Dec 16, 2012 at 12:22 AM, James M Snell <jasn...@gmail.com> wrote:
>>>>
>>>>
>>>>
>>>>
>>>> On Sat, Dec 15, 2012 at 8:36 PM, Robert Sayre <say...@gmail.com> wrote:
>>>>>
>>>>> On Fri, Dec 14, 2012 at 9:17 AM, Markus Lanthaler
>>>>> <markus.lantha...@gmx.net> wrote:
>>>>>>
>>>>>> Hmm.. I think that’s quite problematic. Especially considering how JSON
>>>>>> Pointer is used in JSON Patch.
>>>>>
>>>>> I agree--I provided the same feedback privately. It seems
>>>>> straightforwardly unsound.
>>>>>
>>>>
>>>> In practice it doesn't seem to be much of an issue.
>>>>
>>>> Specifically, if I GET an existing document and get an etag with the JSON,
>>>> then make some changes and send a PATCH with If-Match, the fact that any
>>>> given pointer could point to an array or object member doesn't really 
>>>> matter
>>>> much.
>>>>
>>>> For example:
>>>>
>>>>> GET /the/doc HTTP/1.1
>>>>
>>>>  <  HTTP/1.1 200 OK
>>>>     ETag: "my-document-tag"
>>>>     Content-Type: application/json
>>>>
>>>>     {"1":"foo"}
>>>>
>>>>> PATCH /the/doc HTTP/1.1
>>>>     If-Match: "my-document-etag"
>>>>     Content-Type: application/json-patch
>>>>
>>>>     [{"op":"add","path":"/2","value":"bar"}]
>>>>
>>>> Generally speaking, someone should not be using PATCH to perform a partial
>>>> modification if they don't already have some knowledge in advance what they
>>>> are modifying. The only time the apparent ambiguity becomes an issue is 
>>>> when
>>>> a client is blindly sending a patch to an unknown endpoint... in which 
>>>> case,
>>>> you get whatever you end up with.
>>>>
>>>> - James
>>>>
>>>>
>>>>>
>>>>> - Rob
>>>>>
>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>> Markus Lanthaler
>>>>>>
>>>>>> @markuslanthaler
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> From: James M Snell [mailto:jasn...@gmail.com]
>>>>>> Sent: Friday, December 14, 2012 5:41 PM
>>>>>> To: Markus Lanthaler
>>>>>> Cc: IETF Discussion; IETF Apps Discuss
>>>>>> Subject: Re: [apps-discuss] Last Call:
>>>>>> <draft-ietf-appsawg-json-pointer-07.txt> (JSON Pointer) to Proposed 
>>>>>> Standard
>>>>>>
>>>>>>
>>>>>>
>>>>>> JSON Pointer does not distinguish between objects and arrays. That is
>>>>>> not determined until the pointer is applied to an actual object 
>>>>>> instance...
>>>>>> the pointer "/1" is valid against {"1":"a"} or ["a","b"]
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Dec 14, 2012 at 2:51 AM, Markus Lanthaler
>>>>>> <markus.lantha...@gmx.net> wrote:
>>>>>>
>>>>>> I've asked that before but didn't get an answer. So let me ask again
>>>>>> (even
>>>>>> though I'm quite sure it has already been asked by somebody else).
>>>>>>
>>>>>> How does JSON Pointer distinguish between objects and arrays? E.g.
>>>>>> consider
>>>>>> the following JSON document:
>>>>>>
>>>>>> {
>>>>>>  "foo": "bar",
>>>>>>  "1": "baz"
>>>>>> }
>>>>>>
>>>>>> As I read the draft, the JSON Pointer "/1" would evaluate to "baz" even
>>>>>> though that's probably not what the author intended. Is there a way to
>>>>>> avoid
>>>>>> that?
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Markus
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Markus Lanthaler
>>>>>> @markuslanthaler
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: apps-discuss-boun...@ietf.org [mailto:apps-discuss-
>>>>>>> boun...@ietf.org] On Behalf Of The IESG
>>>>>>> Sent: Tuesday, December 11, 2012 4:01 PM
>>>>>>> To: IETF-Announce
>>>>>>> Cc: apps-disc...@ietf.org
>>>>>>> Subject: [apps-discuss] Last Call: <draft-ietf-appsawg-json-pointer-
>>>>>>> 07.txt> (JSON Pointer) to Proposed Standard
>>>>>>>
>>>>>>>
>>>>>>> The IESG has received a request from the Applications Area Working
>>>>>>> Group
>>>>>>> WG (appsawg) to consider the following document:
>>>>>>> - 'JSON Pointer'
>>>>>>>  <draft-ietf-appsawg-json-pointer-07.txt> as Proposed Standard
>>>>>>>
>>>>>>> The IESG plans to make a decision in the next few weeks, and solicits
>>>>>>> final comments on this action. Please send substantive comments to
>>>>>>> the
>>>>>>> ietf@ietf.org mailing lists by 2012-12-25. Exceptionally, comments
>>>>>>> may
>>>>>>> be
>>>>>>> sent to i...@ietf.org instead. In either case, please retain the
>>>>>>> beginning of the Subject line to allow automated sorting.
>>>>>>>
>>>>>>> Abstract
>>>>>>>
>>>>>>>
>>>>>>>   JSON Pointer defines a string syntax for identifying a specific
>>>>>>> value
>>>>>>>   within a JSON document.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> The file can be obtained via
>>>>>>> http://datatracker.ietf.org/doc/draft-ietf-appsawg-json-pointer/
>>>>>>>
>>>>>>> IESG discussion can be tracked via
>>>>>>>
>>>>>>> http://datatracker.ietf.org/doc/draft-ietf-appsawg-json-pointer/ballot/
>>>>>>>
>>>>>>>
>>>>>>> No IPR declarations have been submitted directly on this I-D.
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> apps-discuss mailing list
>>>>>>> apps-disc...@ietf.org
>>>>>>> https://www.ietf.org/mailman/listinfo/apps-discuss
>>>>>>
>>>>>> _______________________________________________
>>>>>> apps-discuss mailing list
>>>>>> apps-disc...@ietf.org
>>>>>> https://www.ietf.org/mailman/listinfo/apps-discuss
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> apps-discuss mailing list
>>>>>> apps-disc...@ietf.org
>>>>>> https://www.ietf.org/mailman/listinfo/apps-discuss
>>>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> apps-discuss mailing list
>>>> apps-disc...@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/apps-discuss
>>>>
>>>
>>>
>>>
>>> --
>>> Matthew P. C. Morley
>> _______________________________________________
>> apps-discuss mailing list
>> apps-disc...@ietf.org
>> https://www.ietf.org/mailman/listinfo/apps-discuss
>
> --
> Mark Nottingham   http://www.mnot.net/
>
>
>

Reply via email to