Re: [regext] Extension Prefixes, JSON Values, and URI Path Segments
"Gould, James" <jgould@verisign.com> Fri, 27 May 2022 12:43 UTC
Return-Path: <jgould@verisign.com>
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 28C34C180A78 for <regext@ietfa.amsl.com>; Fri, 27 May 2022 05:43:41 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.099
X-Spam-Level:
X-Spam-Status: No, score=-7.099 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_HI=-5, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=verisign.com
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 9j37Dr5Bzrff for <regext@ietfa.amsl.com>; Fri, 27 May 2022 05:43:36 -0700 (PDT)
Received: from mail3.verisign.com (mail3.verisign.com [72.13.63.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id AFE0BC1D467A for <regext@ietf.org>; Fri, 27 May 2022 05:43:31 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=verisign.com; l=12948; q=dns/txt; s=VRSN; t=1653655418; h=from:to:subject:date:message-id:content-id: content-transfer-encoding:mime-version; bh=OtqRb5Kg81d9IjGp4vbWvNkLCAGGJlS9ufulqJ75Hds=; b=OErHGyB4t63v8zi4W2hubJRtFYP8edkaNQDoFDKyFZdDdNLoBTwGagPO nOkm5GLQBhEVFWM3aoBanFGXMxrdgDoA3xHtvpmOoJ2YYmdYsfIgX/khb HqYcAxRUfgMnhLi6xL+jZITRrqQrFMiDPeKoJSXuQPRQJFbCBypSydmIM FJVKGbl2Xo7qXi+DKLKjxGr8xf1S7suGmEKIeeOzY/Xds34aFOkwF4VSS tBwFz6yH29mx5ekZIcs/eSHzKl5N76mw0fyagb/3yr1mHc7tmWQEzpWzO PInALimMd9wo2JyDQmYlmalUMOMHKlhQV+rqRcAV1oyMbLwZo3w0LN7KF w==;
IronPort-Data: A9a23:aCPVq6oWQ9UJfUawmTerxuuooldeBmJsZBIvgKrLsJaIsI4StFCzt garIBmGPvuMamT9Ldh0aNy+/U1QvcXXndFnTwc9+XxgFywbopacVYWSI3mrMnLJJKUvbq7FA +Y2MYCccZ9uHhcwgj/3b9ANeFEljfngqoIRjIcoAwgpLeNeYH5JZSlLxqho2+aEvfDjW1nX4 Y6o/JWFULOY82Uc3lw8uvrrRCxH4ayaVAMw5jTSstgS4TcyP1FMZH4uDfnZw0nQG+G4LcbjL wr394xVy0uCl/sbIoj8zuukKB1iron6ZmBiglIOM0SrqkYa+nxqis7XPtJEAatco23hc9ycV LyhHHF/IOskFvSkpQgTb/VXO3x9YqdG5JrFGEiQqvHQ8m/4Umrz6vo7WSnaPaVAkgp2KUt00 6UnDh09NknFmemx2qr9Q+UqmN44Ko/gO4Z3VnNIlGmfVKl9B8meGOOWtbe03x9p7ixKNfTRY NcdZRJxYQ7BeBxAPBEcD5dWcOKA3ySlKmID9wz9Sawf71Hv7DQpwJvRaMeSWvm7fZVzlFjAu TeTl4j+KlRAXDCF8hKA+2itganLmi31Qo8eE5W59+Isi1uJgG0PYDUNVVy/pfS/gEO1WIcDc 1IZ4Cs1rKc0skesS/HxWhSiqziFswISHd1KHIUS8gyCx7rIyweUGmZCSSROAOHKr+c8Xzpzy VmEj4uwQCdxqvuQSGnY/LDSpym0YG4LN3QEIyQDSGPp/uXenW36tTqXJv4LLUJ/poSd9e3Yq 9xSkBUDug==
IronPort-HdrOrdr: A9a23:NutQ9qO+RoZRt8BcThyjsMiBIKoaSvp037BN7TEVdfU1SL37qy nAppQmPHPP5gr5O0tOpTnoAsDpfZq2z+8X3WB+B9afdTijlmeuIJpr8IfuhxbxcheTysdtkY NtabJ3BtG1L1Rr5PyR3CCIV/It2sOO/qztv/rZ1HsFd2xXQrtt9Bh0ETyWFUBKRA1LbKBTKK ah
X-IronPort-AV: E=Sophos;i="5.91,255,1647302400"; d="scan'208";a="15217376"
Received: from BRN1WNEX01.vcorp.ad.vrsn.com (10.173.153.48) by BRN1WNEX01.vcorp.ad.vrsn.com (10.173.153.48) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.24; Fri, 27 May 2022 08:43:28 -0400
Received: from BRN1WNEX01.vcorp.ad.vrsn.com ([10.173.153.48]) by BRN1WNEX01.vcorp.ad.vrsn.com ([10.173.153.48]) with mapi id 15.01.2375.024; Fri, 27 May 2022 08:43:28 -0400
From: "Gould, James" <jgould@verisign.com>
To: "mario.loffredo@iit.cnr.it" <mario.loffredo@iit.cnr.it>, "shollenbeck=40verisign.com@dmarc.ietf.org" <shollenbeck=40verisign.com@dmarc.ietf.org>, "regext@ietf.org" <regext@ietf.org>
Thread-Topic: Re: [regext] Extension Prefixes, JSON Values, and URI Path Segments
Thread-Index: AQHYccdcZarGPyHyAkuPFnBkUqQg+g==
Date: Fri, 27 May 2022 12:43:28 +0000
Message-ID: <BDB77AE3-CD47-46F9-81D1-C7B0066DBBEF@verisign.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
user-agent: Microsoft-MacOutlook/16.59.22031300
x-originating-ip: [10.170.148.18]
Content-Type: text/plain; charset="utf-8"
Content-ID: <A619C6F7F370E14EB6DAC05006FBBD0F@verisign.com>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
Archived-At: <https://mailarchive.ietf.org/arch/msg/regext/r9nv3pZ7Ofa5I1hHUBMQyc9DdxQ>
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: Fri, 27 May 2022 12:43:41 -0000
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. 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? 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. I view attempting to model XML schemas with predefined XML prefixes as brittle and unneeded. Enable true versioning in the RDAP conformance and enable prefixes to be independently registered in the RDAP Extension Registry without any predefined linkage. Thanks, -- 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, 6:43 AM, "Mario Loffredo" <mario.loffredo@iit.cnr.it> wrote: Hi Tom, sorry for the delay in replying but yesterday I took a day off :-) Please find my comments below. Il 26/05/2022 00:33, Tom Harrison ha scritto: > Hi Mario, > > On Wed, May 25, 2022 at 08:21:45PM +0200, Mario Loffredo wrote: >> I'm concerned about injecting the version information into >> prefixes/identifiers as I see some drawbacks in dealing with non-breaking >> changes, which hopefully should be the majority and usually don't require to >> manage a deprecation process. >> >> For example, introducing a new property into a response extension would >> result in returning the same information twice (e.g. the response field >> "ext1_..." and response field "ext2_..." resulting from adding the new >> property to "ext1_..") . >> >> To ensure interoperability, both the response fields should coexist for a >> period time so that the RDAP server could manage the sunset and then the >> deprecation of "ext1_..." as smoothly as possible. >> >> Furthermore, according to a largely used best practice in versioning REST >> APIs, breaking changes should always result in a change to the major version >> number while non-breaking changes, such as adding new endpoints or new >> response parameters, do not require a change to the major version number. >> >> Unfortunately, injecting the version information into the >> prefixes/identifiers means that every change would break the RDAP server and >> would result in a change of the major version number !?!? > If you make a backwards-compatible change, like addition of a new > field, I think one option is to update the existing specification > document by noting that there is a new 'version' of the specification > that uses the existing rdapConformance value (and prefixes, etc.) but > also includes that new field. In the case where a single field is > added, the presence or absence of that field is as good as an updated > rdapConformance value for determining which 'version' of the > specification is in use. If more complicated changes are introduced, > the specification could add its own versioning field inside a custom > element that it returns. > > (To avoid any doubt, I'm not advocating for this long-term, I'm just > noting that it's possible to make backwards-compatible changes in > accordance with a 'strict' reading of the current text without > changing the names used throughout the extension.) > > -Tom Think the matter is that even the possible backwards-compatible changes would result in being hardly backwards-compatible. Let te me give an example to make myself clear and move the discussion on a practical perspective. Let's call "ext1" the rdapConformance value signaling the support of "ext1_data" response extension. The response would be: { "rdapConformance" : [ ....., "ext1"], ... "ext1_data" : { ... }, .... } Now, let's suppose to add the field "newfield" to "ext1_data" and signal this change by a version update from "ext1" to "ext2". The response should be (in theory): { "rdapConformance" [ ....., "ext2"], ... "ext2_data" : { ... }, // where ext2_data includes all the member of "ext1_data" plus "newfield" .... } To avoid a breakage in the REST contract, the RDAP server should implement a deprecation process ending with the replacement of "ext1_data" with "ext2_data". This means that, for a period of time, both the version of the response extensions should be provided: { "rdapConformance" [ ....., "ext1", "ext2"], ... "ext1_data" : { ... }, "ext2_data" : { ... }, .... } This situation would result in the following paradox as well: being the introduction of new field in a JSON response widely considered a non breaking change, it should be signaled by a minor version update (e.g. "ext1_1). But, since the final effect would be the replacement of a response field with another, a major version change should be used instead. In short, every new version of the response extension would imply a major version update ("ext1", "ext2", "ext3", ..) and a consequent deprecation process the server should support. A possible inelegant and misleading workaround would be to treat any new version as a new extension like in the following: { "rdapConformance" [ ....., "ext1", "newfield1"], ... "ext1_data" : { ... "newfiled1" : { ... } }, .... } Stripping the version information from the extension prefix (Approach B or C) would simplify the management of this case: { "rdapConformance": [ ....., "ext_1_1"], // (or "ext_level_1_1") to be determined if the RDAP server should include both "ext_1" and "ext_1_1" at least for a period of time ... "ext_data" : { ... "newfiled" : { ... } }, .... } Definitively, no breakages in the REST API contract, no deprecation process to be managed by the server, no extra effort for both client and server owing to the fact that JSON is schemeless and, by default, JSON libraries don't block the deserialization of an object including an unknown property. A similar example is about adding a new optional query parameter to an URI path defined by a request extension. Guess we could face similar cases in the next future since REST services usually evolves and, in particular, RDAP is currently still evolving. Hence, it's fundamental to define guidelines for RDAP extensions supporting interoperability and limiting the impact of version changes on both client and server as much as possible. Best, Mario -- 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/1FBEcpx6ZtxhD0FpwQfpyUzSIp2YeomEs8ZRdYLsJtYWIL8NLNIVMkTghjd1FWg261dSfSEbQJgf6k5Y_ro4-U6gZsfIVBYBmbDjrEay2y7Ia479iG_H-gcxHss9yqIFEefpcy2c5fQQGkbnXkoiDlgSdTuaQbnh2DXwu_0tAbYzX8CgOnrOKQ-TY-d4s5GVIo-5cw16dHbzSJ5lnCw2zK22LBvJ2aLz2xL_fmCQ7Cb0DdO1Z2aXXJphtQILEbwU5/http%3A%2F%2Fwww.iit.cnr.it%2Fmario.loffredo
- [regext] Extension Prefixes, JSON Values, and URI… Hollenbeck, Scott
- Re: [regext] Extension Prefixes, JSON Values, and… Mario Loffredo
- Re: [regext] Extension Prefixes, JSON Values, and… Mario Loffredo
- Re: [regext] Extension Prefixes, JSON Values, and… Jasdip Singh
- Re: [regext] Extension Prefixes, JSON Values, and… Hollenbeck, Scott
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Jasdip Singh
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Hollenbeck, Scott
- Re: [regext] Extension Prefixes, JSON Values, and… Jasdip Singh
- Re: [regext] Extension Prefixes, JSON Values, and… Jasdip Singh
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Jasdip Singh
- Re: [regext] Extension Prefixes, JSON Values, and… Mario Loffredo
- Re: [regext] Extension Prefixes, JSON Values, and… Pawel Kowalik
- Re: [regext] Extension Prefixes, JSON Values, and… Tom Harrison
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Tom Harrison
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Hollenbeck, Scott
- Re: [regext] Extension Prefixes, JSON Values, and… Tom Harrison
- Re: [regext] Extension Prefixes, JSON Values, and… Mario Loffredo
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Tom Harrison
- Re: [regext] Extension Prefixes, JSON Values, and… Hollenbeck, Scott
- Re: [regext] Extension Prefixes, JSON Values, and… Andrew Newton
- Re: [regext] Extension Prefixes, JSON Values, and… Tom Harrison
- Re: [regext] Extension Prefixes, JSON Values, and… Andrew Newton
- Re: [regext] Extension Prefixes, JSON Values, and… Hollenbeck, Scott
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Tom Harrison
- Re: [regext] Extension Prefixes, JSON Values, and… Tom Harrison
- Re: [regext] Extension Prefixes, JSON Values, and… Jasdip Singh
- Re: [regext] Extension Prefixes, JSON Values, and… Mario Loffredo
- Re: [regext] Extension Prefixes, JSON Values, and… Jasdip Singh
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Hollenbeck, Scott
- Re: [regext] Extension Prefixes, JSON Values, and… Hollenbeck, Scott
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Hollenbeck, Scott
- Re: [regext] Extension Prefixes, JSON Values, and… Mario Loffredo
- Re: [regext] Extension Prefixes, JSON Values, and… Hollenbeck, Scott
- Re: [regext] Extension Prefixes, JSON Values, and… Andrew Newton
- Re: [regext] Extension Prefixes, JSON Values, and… Tom Harrison
- Re: [regext] Extension Prefixes, JSON Values, and… Mario Loffredo
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Mario Loffredo
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Jasdip Singh
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Jasdip Singh
- Re: [regext] Extension Prefixes, JSON Values, and… Tom Harrison
- Re: [regext] Extension Prefixes, JSON Values, and… Mario Loffredo
- Re: [regext] Extension Prefixes, JSON Values, and… Mario Loffredo
- Re: [regext] Extension Prefixes, JSON Values, and… Tom Harrison
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James
- Re: [regext] Extension Prefixes, JSON Values, and… Marc Blanchet
- Re: [regext] Extension Prefixes, JSON Values, and… Jasdip Singh
- Re: [regext] Extension Prefixes, JSON Values, and… Tom Harrison
- Re: [regext] Extension Prefixes, JSON Values, and… Mario Loffredo
- Re: [regext] Extension Prefixes, JSON Values, and… Gould, James