Re: [regext] Extension Prefixes, JSON Values, and URI Path Segments

Jasdip Singh <jasdips@arin.net> Tue, 31 May 2022 20:20 UTC

Return-Path: <jasdips@arin.net>
X-Original-To: regext@ietfa.amsl.com
Delivered-To: regext@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id DB78BC15AACA for <regext@ietfa.amsl.com>; Tue, 31 May 2022 13:20:11 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.906
X-Spam-Level:
X-Spam-Status: No, score=-1.906 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0zT_pbE91qfW for <regext@ietfa.amsl.com>; Tue, 31 May 2022 13:20:07 -0700 (PDT)
Received: from smtp3.arin.net (smtp3.arin.net [199.43.0.53]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 952E7C157901 for <regext@ietf.org>; Tue, 31 May 2022 13:20:07 -0700 (PDT)
Received: from CAS01CHA.corp.arin.net (cas01cha.corp.arin.net [10.1.30.62]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by smtp3.arin.net (Postfix) with ESMTPS id 8C9761070264; Tue, 31 May 2022 16:20:06 -0400 (EDT)
Received: from CAS01CHA.corp.arin.net (10.1.30.62) by CAS01CHA.corp.arin.net (10.1.30.62) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 31 May 2022 16:20:06 -0400
Received: from CAS01CHA.corp.arin.net ([fe80::99af:898b:219f:401]) by CAS01CHA.corp.arin.net ([fe80::99af:898b:219f:401%17]) with mapi id 15.00.1497.000; Tue, 31 May 2022 16:20:06 -0400
From: Jasdip Singh <jasdips@arin.net>
To: Mario Loffredo <mario.loffredo@iit.cnr.it>, "Gould, James" <jgould@verisign.com>, "Hollenbeck, Scott" <shollenbeck@verisign.com>, "regext@ietf.org" <regext@ietf.org>
Thread-Topic: [regext] Extension Prefixes, JSON Values, and URI Path Segments
Thread-Index: AQHYcdZwbfHYOMf3EkinO+EQYlub3K03Y2IAgAIQkoA=
Date: Tue, 31 May 2022 20:20:05 +0000
Message-ID: <4C2715CD-99AA-4581-B6AF-44D4664BBE96@arin.net>
References: <BD07441E-20A3-43F6-8F38-3CA9DD593FBC@arin.net> <49e61780-c611-7bd8-8da9-490c8eeb84b2@iit.cnr.it>
In-Reply-To: <49e61780-c611-7bd8-8da9-490c8eeb84b2@iit.cnr.it>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ms-exchange-messagesentrepresentingtype: 1
x-ms-exchange-transport-fromentityheader: Hosted
x-originating-ip: [192.136.136.37]
Content-Type: text/plain; charset="utf-8"
Content-ID: <978065B1812E8947A04EC673264158BC@corp.arin.net>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
Archived-At: <https://mailarchive.ietf.org/arch/msg/regext/qStEY7yarVB6NZrqmKvmTSqu1BM>
Subject: Re: [regext] Extension Prefixes, JSON Values, and URI Path Segments
X-BeenThere: regext@ietf.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Registration Protocols Extensions <regext.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/regext>, <mailto:regext-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/regext/>
List-Post: <mailto:regext@ietf.org>
List-Help: <mailto:regext-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/regext>, <mailto:regext-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 31 May 2022 20:20:11 -0000

Hi Mario,

Few comments, and one suggestion.

Thanks,
Jasdip

On 5/30/22, 4:50 AM, "Mario Loffredo" <mario.loffredo@iit.cnr.it> wrote:

    Hi Jasdip,

    the current approach appears unpractical to me as it results in managing 
    all the changes in the same manner regardless their scope.

[JS] Consistency is the key point. Per the Breakage Analysis section in the RDAP Extensions Analysis doc I had shared earlier [1], the current approach -- tight coupling between extension identifier and rdapConformance value -- seems to afford us zero collisions and near-zero breakage for various change scenarios, and that should be a good thing, no?. To your point, yes, there are few scenarios (especially during transition for an extension vis-à-vis an existing path without that extension identifier in it) where sending data for both the old and new extension identifier in a response sounds inefficient but that's the trade-off with a consistent, collision- and breakage-free extension model. 

[1] https://docs.google.com/document/d/1iadJc1D2-z_9pSy0PNcl4mhEQglh7dIHhbmRgrCW6mc/edit?usp=sharing 

    A unified apporach is always advisable except in those cases where it 
    results in adding complexity where it is unneeded. And I suspect  that 
    this would be one of those cases.

    Indeed, handling every change (at least reading strictly the RFCs) 
    through a transition process would be a mess for server operators.

[JS] It doesn't look like we need any extraneous transition process beside listing the from and to extension identifiers in the rdapConformance array. Please see below one plausible way for jcard-to-jscontact transition using solely the current approach.

    Let's imagine, for example, how a possible non-breaking change in 
    JSContact representation impacting on the RDAP response could be managed 
    while the possible transition from VCARD to JSContact was still in place.

    Server operators may have to deal with a transition within another 
    transition ?!?!

[JS] One plausible way for jcard-to-jscontact transition using solely the current approach (tight coupling):

Phase 1: Only jcard
---------------------------

p = entity/<handle>

{
  “rdapConformance” : [
    “rdap_level_0”
  ],
  {
    …,
    "vcardArray" : [
      …
    ]
  }
}

Phase 2: jscard_0 extension (available along with jcard)
---------------------------------------------------------------------------

p = entity/<handle>

{
  “rdapConformance” : [
    “rdap_level_0”,
    “jscard_0”
  ],
  {
    …,
    "vcardArray" : [
      …
     ],
    “jscard_0” : {
      …
    }
  }
}

Phase 3: no_jcard extension (jcard data no more in response)
-----------------------------------------------------------------------------------

p = entity/<handle>

{
  “rdapConformance” : [
    “rdap_level_0”,
    “jscard_0”,
    “no_jcard”
  ],
  {
    …,
    “jscard_0” : {
      …
    }
  }
}

Phase 4: jscard_1 extension (has a new field beside the jscard_0 data)
---------------------------------------------------------------------------------------------

p = entity/<handle>

{
  “rdapConformance” : [
    “rdap_level_0”,
    “jscard_0”,
    “no_jcard”,
    “jscard_1”
  ],
  {
    …,
    “jscard_0” : {
      …
    },
    “jscard_1” : {
      …,
      “new_field” : …
    }
  }
}

Phase 5: Transition from jscard_0 to jscard_1 after a sufficient grace period for clients
-------------------------------------------------------------------------------------------------------------------

p = entity/<handle>

{
  “rdapConformance” : [
    “rdap_level_0”,
    “no_jcard”,
    “jscard_1”
  ],
  {
    …,
    “jscard_1” : {
      …
    }
  }
}

    Non-breaking changes can be more easily managed and signaled by server 
    operators by adding a minor version in rdapConformance array and an 
    optional link to the related documentation in the response. That's it.

[JS] One suggestion. To help settle and/or move forward the discussion vis-a-vis if we should stick with the current approach (tight coupling), or evolve using the proposed approach (lack of tight coupling), it would be great if we could review and discuss the Breakage Analysis section in https://docs.google.com/document/d/1iadJc1D2-z_9pSy0PNcl4mhEQglh7dIHhbmRgrCW6mc/edit?usp=sharing and decide whether the breakage points matter for various change scenarios or not.

    Cheers,

    Mario


    Il 27/05/2022 16:31, Jasdip Singh ha scritto:
    > Hi.
    >
    > I'd contend that unlike the proposed approach(es), current approach:
    > - guarantees no collisions under every change scenario (not just optional new field)
    > - guarantees sufficient transition time for clients when moving to the next version of an extension (without requiring any additional signaling beyond RDAP conformance) and thereby, guarantees near-zero breakage (breakage only possible if a client ignores the transition time)
    > - has a simple registration model for each opaque extension identifier
    >
    > Jasdip
    >
    > On 5/27/22, 10:25 AM, "regext on behalf of Gould, James" <regext-bounces@ietf.org on behalf of jgould=40verisign.com@dmarc.ietf.org> wrote:
    >
    >      Mario,
    >
    >          [ML] My only objection to Approach C is that every new version would
    >          result in registering a new extension identifier. I would opt for a less
    >          verbose solution, if any.
    >
    >      I'm not aware of the plan for new versions of the existing extensions, so I don't view it as a scalability issue.  While an extension is an Internet Draft, the pointed versions will not be registered until the draft becomes an RFC.  This is similar to what happens with the EPP extensions, where pre-RFC implementers can use the pointed version contained in the draft for signaling that will eventually become a full registered version (e.g., "0_N" becoming "1" or "1_N" becoming "2") in the registry.  When there are multiple versions of an extension, I believe it is important to capture those versions in the RDAP Extension Registry with a link to the associated specification.  Mixing versioning with the prefixes I believe is unnecessary and brittle, so I don't support Approach A.  Approach B provides the flexibility to define the full RDAP Conformance version in the specification, so it supports versioning without the brittle side effects, but I view Approach C as being better since the versioning is more explicit in the registry.  If there is the risk of an overload of versions in the registry, then I would agree with the concern of Approach C, but I don't believe that risk exists.
    >
    >      --
    >
    >      JG
    >
    >
    >
    >      James Gould
    >      Fellow Engineer
    >      jgould@Verisign.com <applewebdata://13890C55-AAE8-4BF3-A6CE-B4BA42740803/jgould@Verisign.com>
    >
    >      703-948-3271
    >      12061 Bluemont Way
    >      Reston, VA 20190
    >
    >      Verisign.com <http://verisigninc.com/>
    >
    >      On 5/27/22, 10:10 AM, "Mario Loffredo" <mario.loffredo@iit.cnr.it> wrote:
    >
    >          Hi james,
    >
    >          my comment inline.
    >
    >          Il 27/05/2022 14:43, Gould, James ha scritto:
    >          > Mario,
    >          >
    >          > Thank you for providing an example of the complexity of versioning that is associated with tightly coupling the RDAP compliance value with the set of prefixes.  Unfortunately, RDAP doesn't include the same sort of version negotiation that exists in EPP with the use of XML namespace URIs in the greeting and login services.  I view the RDAP Conformance being closer to the EPP greeting services.  I'll continue down the EPP line of discussion, where EPP leverages the XML namespace URIs for versioning that is tied to XML schemas and leverages XML namespace prefixes for grouping of the XML elements.  EPP explicitly requires the use of a namespace-aware XML parser, which enables the use of any XML namespace prefix.  There is no direct tie in the RFCs to the specific XML namespace prefix to use that is linked with the versioned XML namespace URIs.
    >          [ML] Agreed. I only meant to make WG see things from a different angle
    >          beyond the considerations based on what RFCs currently permit presenting
    >          what could be the operational consequences of opting for Approach A.
    >          >
    >          >
    >          > REST and JSON is schema-less, so are we attempting to bring in XML concepts into REST and JSON with the tight coupling of extension RDAP conformance values and the extension elements?
    >          [ML] Clearly stated that we shouldn't. But what is most important,
    >          > Approach C that is currently implemented in draft-ietf-regext-rdap-redacted includes the registration of a full versioned identifier for the RDAP Conformance, with "redacted_level_0_3" and the registration of the prefix "redacted" to ensure uniqueness with other extensions.  The "redacted" prefix looks a lot like "redacted_level_0_3", but that is not required.  The tie between the tie is based on the use of the same "Published specification" value in the RDAP Extension Registry.  I haven't heard of a concrete case to help the client out by having the RDAP Conformance value match the prefix with the optional support for versioning in both.  An extension should be additive, and the client would first key off the set of versioned RDAP conformance values, to determine what is supported based on what is defined in the specification.  We have no equivalent of an XML schema, and I don't believe we should attempt to model that in RDAP.
    >          [ML] Me too.
    >          > I view attempting to model XML schemas with predefined XML prefixes as brittle and unneeded.
    >          [ML] Fully agreed. I'd also say "unpractical" as it would reduce the
    >          benefits from using REST and JSON.
    >          > Enable true versioning in the RDAP conformance and enable prefixes to be independently registered in the RDAP Extension Registry without any predefined linkage.
    >
    >          [ML] My only objection to Approach C is that every new version would
    >          result in registering a new extension identifier. I would opt for a less
    >          verbose solution, if any.
    >
    >          Summarizing, I'm OK with either approach B or C.
    >
    >
    >          Best,
    >
    >          Mario
    >
    >          >
    >          >
    >          > Thanks,
    >          >
    >          --
    >          Dr. Mario Loffredo
    >          Technological Unit “Digital Innovation”
    >          Institute of Informatics and Telematics (IIT)
    >          National Research Council (CNR)
    >          via G. Moruzzi 1, I-56124 PISA, Italy
    >          Phone: +39.0503153497
    >          Web: http://secure-web.cisco.com/16t5sBrz_iAuxdO4FzKpp7t63WvEdOI56N9ldgS_C5bon4NCc-fivU9_kFZf8_evpDmkcPCcQiuBoJ7ofMrxCHVesyRtQIvx85qEcFV0qX_2PuNNpIb30pT3SRzrneNKg75w7-OAskVaeHoaFH9yk1uOXj-IB65xr1AE0B_z08bGMucXu9VhZ-ghBF2wZjUuw9-C2po2YN2kn9i4nBpQQqX0Kc1A-h2sVt4NJuokO7CbStWfhVUom1hVeNIZuUWn3/http%3A%2F%2Fwww.iit.cnr.it%2Fmario.loffredo
    >
    >
    >      _______________________________________________
    >      regext mailing list
    >      regext@ietf.org
    >      https://www.ietf.org/mailman/listinfo/regext
    >
    > _______________________________________________
    > regext mailing list
    > regext@ietf.org
    > https://www.ietf.org/mailman/listinfo/regext

    -- 
    Dr. Mario Loffredo
    Technological Unit “Digital Innovation”
    Institute of Informatics and Telematics (IIT)
    National Research Council (CNR)
    via G. Moruzzi 1, I-56124 PISA, Italy
    Phone: +39.0503153497
    Web: http://www.iit.cnr.it/mario.loffredo