Re: [netmod] attributes in draft-lhotka-netmod-yang-json

Andy Bierman <andy@yumaworks.com> Wed, 26 March 2014 15:48 UTC

Return-Path: <andy@yumaworks.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 16B901A02D8 for <netmod@ietfa.amsl.com>; Wed, 26 Mar 2014 08:48:00 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.978
X-Spam-Level:
X-Spam-Status: No, score=-1.978 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id r7EJSVle1Twp for <netmod@ietfa.amsl.com>; Wed, 26 Mar 2014 08:47:57 -0700 (PDT)
Received: from mail-qc0-f176.google.com (mail-qc0-f176.google.com [209.85.216.176]) by ietfa.amsl.com (Postfix) with ESMTP id 276E71A0348 for <netmod@ietf.org>; Wed, 26 Mar 2014 08:47:49 -0700 (PDT)
Received: by mail-qc0-f176.google.com with SMTP id m20so2799291qcx.35 for <netmod@ietf.org>; Wed, 26 Mar 2014 08:47:47 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=7AYEW33GLjyAZR1bNv0rMtpYxeozIQQsC1sjx9NO1wA=; b=U4zee495THzU3Ss+egHdsgd/2qYptTfPAyJaiYiNCc44Y7j9U64ly5vBOg7ssVZPc3 6rRdaaZ2ZwENX4pRXK7RAVdNplbnLM1EiAlvyY+zM+aR/Wh4hpduIQ91A/tqZx6lqCk8 oWR7ZxNmxmnxwpv3HJJfgE4Fdpcv9aTrX0sQWJI1D2n2Y5EywzzXoGXbWkKMMqKbPK5u nrP+FsvpDa7ylrUY+DLJQm9vyhv87bf6+oxmC1mFbvw5H1N1CkTM+RymQhi8vYBVMauC 49pT3/nXINAr7sKEPjzCfuS3iwV1CZhTKKuqOXdJq1v2bNExrskmAvy5mks219C5G4ol TT4g==
X-Gm-Message-State: ALoCoQmi3/Nxt7b1hO66YsJOhYBTaDwkF/82tnWvnA8SMKwpMyX6/UuBdYJRyN/al3XO6t1bKmX8
MIME-Version: 1.0
X-Received: by 10.224.66.8 with SMTP id l8mr90386645qai.16.1395848867510; Wed, 26 Mar 2014 08:47:47 -0700 (PDT)
Received: by 10.140.104.194 with HTTP; Wed, 26 Mar 2014 08:47:47 -0700 (PDT)
In-Reply-To: <20140326.161220.1907816882803386580.mbj@tail-f.com>
References: <20140326.152737.330538996469661145.mbj@tail-f.com> <CABCOCHSmt-Mr2fe-Xmpajz0v8jg=XOJsY4CMEtCBe1GzTbL6EA@mail.gmail.com> <6F6EF691-5134-4243-B25D-96C54760741C@nic.cz> <20140326.161220.1907816882803386580.mbj@tail-f.com>
Date: Wed, 26 Mar 2014 08:47:47 -0700
Message-ID: <CABCOCHQ4KYXU94jRSaAsenEn-mK2k7b+1Uv4Yg_AmcatqtDBUg@mail.gmail.com>
From: Andy Bierman <andy@yumaworks.com>
To: Martin Bjorklund <mbj@tail-f.com>
Content-Type: multipart/alternative; boundary="001a11c2c27ae88b2c04f58463b0"
Archived-At: http://mailarchive.ietf.org/arch/msg/netmod/Qvv-FkrncFDx1-BGRpJhwNvn5vI
Cc: "netmod@ietf.org" <netmod@ietf.org>
Subject: Re: [netmod] attributes in draft-lhotka-netmod-yang-json
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: NETMOD WG list <netmod.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netmod>, <mailto:netmod-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/netmod/>
List-Post: <mailto:netmod@ietf.org>
List-Help: <mailto:netmod-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netmod>, <mailto:netmod-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 26 Mar 2014 15:48:00 -0000

On Wed, Mar 26, 2014 at 8:12 AM, Martin Bjorklund <mbj@tail-f.com> wrote:

> Ladislav Lhotka <lhotka@nic.cz> wrote:
> >
> > On 26 Mar 2014, at 15:43, Andy Bierman <andy@yumaworks.com> wrote:
> >
> > >
> > >
> > >
> > > On Wed, Mar 26, 2014 at 7:27 AM, Martin Bjorklund <mbj@tail-f.com>
> > > wrote:
> > > Andy Bierman <andy@yumaworks.com> wrote:
> > > > On Wed, Mar 26, 2014 at 7:10 AM, Ladislav Lhotka <lhotka@nic.cz>
> > > > wrote:
> > > >
> > > > >
> > > > > On 26 Mar 2014, at 14:57, Martin Bjorklund <mbj@tail-f.com> wrote:
> > > > >
> > > > > > Ladislav Lhotka <lhotka@nic.cz> wrote:
> > > > > >> Martin Bjorklund <mbj@tail-f.com> writes:
> > > > > >>
> > > > > >>> Hi,
> > > > > >>>
> > > > > >>> Here's yet another attempt to handle attributes in JSON,
> without
> > > > > >>> changing the encoding for the case that there are no attributes
> > > > > >>> present.
> > > > > >>>
> > > > > >>> In all examples, the attributes "inactive" and "etag" are
> present.
> > > > > >>>
> > > > > >>> Attributes are encoded differently depending on the type of
> object:
> > > > > >>>
> > > > > >>>
> > > > > >>> leaf
> > > > > >>> ----
> > > > > >>>
> > > > > >>> Encode the attributes as a sibling to the leaf.
> > > > > >>>
> > > > > >>>
> > > > > >>>  leaf foo {
> > > > > >>>    type string;
> > > > > >>>  }
> > > > > >>>
> > > > > >>>  "foo": "some value";
> > > > > >>>  "@foo": {
> > > > > >>>     "inactive": true,
> > > > > >>>     "etag": "...";
> > > > > >>>   }
> > > > > >>>
> > > > > >>>
> > > > > >>> list instance
> > > > > >>> -------------
> > > > > >>>
> > > > > >>> Encode the attributes within the list instance.
> > > > > >>>
> > > > > >>>
> > > > > >>>  list bar {
> > > > > >>>    key name;
> > > > > >>>    leaf name {
> > > > > >>>      type string;
> > > > > >>>    }
> > > > > >>>    ...
> > > > > >>>  }
> > > > > >>>
> > > > > >>>  "bar": [
> > > > > >>>     {
> > > > > >>>        "@bar": {
> > > > > >>>           "inactive": true,
> > > > > >>>           "etag": "..."
> > > > > >>>         }
> > > > > >>>         "name": "instance name";
> > > > > >>>      }]
> > > > > >>>
> > > > > >>
> > > > > >> This could be ambiguous:
> > > > > >>
> > > > > >> list bar {
> > > > > >>  key name;
> > > > > >>  leaf name { ... }
> > > > > >>  leaf bar { ... }
> > > > > >> }
> > > > > >>
> > > > > >> Then you don't know whether the attributes belong to the list
> entry
> > > > > >> or to the contained leaf.
> > > > > >
> > > > > > Right. Then we use "@@bar" for the list / container attributes.
> > > > >
> > > > > OK, then this scheme is fine with me.
> > > > >
> > > > >
> > > > Looks more complicated than other solution proposals.
> > >
> > > Do we agree that we don't want different encodings for values if there
> > > are attributes or not?  I.e., if my code works when no attributes are
> > > present, it should also work if there are attributes?
> >
> > I am not sure even your encoding satisfies this requirement. At least
> > your code has to be instructed to ignore the attribute stuff.
>
> In general, I think robust code would ignore unknown fields.
>
> > > Not if the normal encoding is painful to use.
> > > The use attributes is going to be rare.
> > > I want the expected "plain" encoding when there are no attributes.
> > > Code that generates JSON and does not care about attributes
> > > must not be rendered useless because the JSON is specially encoded
> > > in RESTCONF.  We want to leverage wide knowledge of JSON,
> > > not invent our own incompatible version of it.
> >
> > This is my preference, too.
>
>
This is not a preference. It is critical that plain JSON code
that knows how to deal with plain data structures does not break.

Well, of course.  But I don't think anyone has proposed something that
> is not valid json.
>
>

That is not the point.  A normal JSON tool is going to generate or expect
"foo":"bar" for a simple leaf, or "foo":[1, 2, 3]  for a simple array, for
example.

The encoding for the data nodes MUST be exactly
the same as the YANG-to-JSON draft now, if no attributes are used.

Only a client that knows about attributes will need to associate an
attribute
with its parent data node.  This must be easy to do.
Other clients should be able to ignore attributes.
A server must reject messages with unknown attributes.

I agree that no proposal is satisfactory for leaf or leaf-list nodes.


> > If so, do we have any other proposal?
> >
> > Leave it to proponents of every use case to figure out ad hoc how to
> > encode what's needed, or resort to XML.
>
> Which for RESTCONF would mean use XML, IMO.
>
> I still think a common definition would be better.
>
>
> /martin
>


Andy