| Internet-Draft | Versioning in RDAP | July 2026 |
| Gould, et al. | Expires 21 January 2027 | [Page] |
This document describes an RDAP extension for an extensible set of versioning types with the features of identifying the RDAP extension versions supported by the server, the RDAP extension versions included in an RDAP response, and enabling a client to specify the desired RDAP extension versions to include in the RDAP query and RDAP response.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 21 January 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
RDAP supports identifying the RDAP extensions included in an RDAP response using the RDAP Conformance data structure, defined in Section 4.1 of [RFC9083]. The RDAP Conformance values are identifiers with no standard mechanism to support structured, machine-parseable version signaling by the server. This document describes an RDAP extension for an extensible set of versioning types, with the pre-defined versioning types of Opaque Versioning (Section 5.1) and Point Versioning (Section 5.2), that have the following features:¶
There are two predefined versioning types that include:¶
The versioning types are registered in the JSON Values Registry, where new versioning types can be defined and registered in the future. The specification of a versioning type defines how the base set of features of the versioning extension are used for the versioning type, such as the "type" value, the format of the Extension Version Identifier, the supported "versioning_help" members, and the supported "versioning" members.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
The extension includes a base set of features that can be used for any defined versioning type. The features enable the client to discover what extension versions are supported by the server, enable the client to specify what extension versions are desired in an RDAP query and RDAP response, and provide the extension versions included in the RDAP response by the server. Examples are provided using the two predefined versioning types in Section 5. The format of the Extension Version Identifier (Section 3.1) is general enough to support a broad range of future versioning types.¶
The Extension Version Identifier adds support for versioning to the Extension Identifier in [RFC7480] that is returned in the RDAP Conformance data structure of [RFC9083]. Each Versioning Type will define the scheme and the meaning of the "versioning" Augmented Backus-Naur Form (ABNF) grammar [RFC5234] rule. The Extension Version Identifier is used to uniquely identify a version of an RDAP extension in the Extension Versioning Request (Section 3.2), the members of the "versioning_help" Member (Section 3.3.2), and the members of the "versioning_data" Member (Section 3.3.3).¶
extension-version-identifier = name versioning ; "name" ABNF rule from RFC 7480 versioning = ["-" 1*( ALPHA / DIGIT / "." )]
Example Extension Version Identifiers:¶
The client MAY provide an Extension Versioning Request to indicate the desired extension versions to include in the RDAP query and RDAP response. There are two Extension Versioning Request methods with the Versioning Query Parameter (Section 3.2.1) and the Versioning "exts_list" Media Type Parameter (Section 3.2.2). The server MUST support both methods of Extension Versioning Request methods and the client MUST use at most a single Extension Versioning Request method in the RDAP query.¶
The Extension Versioning Request provides a hint from the client what extension versions to include in the RDAP query by the client and RDAP response by the server. It is up to server policy what extension versions to support in the RDAP query and the extension versions to include in the RDAP response, based on the supported set of extensions, the default extension versions, and the hint provided by the client using the Extension Versioning Request. The server MUST ignore an unsupported extension version in constructing the response.¶
The "versioning" query parameter MAY be used with RDAP queries to specify the RDAP extension versions to include in the RDAP query and the RDAP response. The "versioning" query parameter is a list of one or more Extension Version Identifiers, as defined in Section 3.1, separated by commas. The ABNF format for the "versioning" query parameter, using the "extension-version-identifier" rule from Figure 1, is:¶
versioning = "versioning=" extension-version-identifier
*("," extension-version-identifier)
Example RDAP queries using the "versioning" query parameter:¶
The "exts_list" Media Type Parameter [I-D.ietf-regext-rdap-x-media-type] MAY be used with RDAP queries to specify the RDAP extension versions to include in the RDAP query and the RDAP response. The RDAP extensions included in the "exts_list" parameter are Extension Version Identifiers, as defined in Section 3.1. The "exts_list" Versioning Extensions Media Type Parameter is a list of one or more Extension Version Identifiers, as defined in Section 3.1, separated by whitespace (%x20). The use of the hyphen ("-") character in the Extension Version Identifier ABNF (Figure 1) ensures that an Extension Version Identifier with a non-empty "versioning" ABNF rule will not conflict with an Extension Identifier, since hyphens are prohibited in the Extension Identifier ABNF (Figure 1). The ABNF format for the "exts_list" parameter, using the "extension-version-identifier" rule from Figure 1, is:¶
extensions = "exts_list="
DQUOTE
extension-version-identifier
*(SP extension-version-identifier)
DQUOTE
Example Versioning Extensions Media Type Parameter values:¶
RDAP responses that contain values described in this document MUST indicate conformance with this specification by including an "rdapConformance" ([RFC9083]) value of "versioning". The "versioning" extension identifier is described in Section 8.1.¶
Example "rdapConformance" member with the versioning extension:¶
"rdapConformance": [
"rdap_level_0",
"versioning"
]
The "versioning_help" member MUST be added to the response of a /help query, defined in [RFC9082], to indicate the extension versions that are supported by the server. This extends the information provided by the guidance in Section 7 of [I-D.ietf-regext-rdap-extensions], with inclusion of the all supported extension identifiers in the RDAP Conformance to the response of a /help query. The "versioning_help" member contains an array of extension objects with the following child members:¶
OPTIONAL "links" array to extension object documentation. The relationship of these links is defined by the IANA registry described in [RFC8288]. The JSON name/values of "rel", "href", "hreflang", "title", "media", and "type" correspond to values found in Section 3 of [RFC8288]. The "value", "rel", and "href" JSON values MUST be specified. All other JSON values are OPTIONAL. It's recommended for the latest documentation to be referenced for an extension object.¶
Example "links" member for the "opaque_ext1" extension identifier:¶
"links": [
{
"value": "https://ext2.example/opaque_ext1.txt",
"rel": "describedby",
"href": "https://ext2.example/opaque_ext1.txt",
"type": "text/plain"
}
]
An OPTIONAL array of extension version objects with the following child members:¶
OPTIONAL "links" array to extension version documentation. The relationship of these links is defined by the IANA registry described in [RFC8288]. The JSON name/values of "rel", "href", "hreflang", "title", "media", and "type" correspond to values found in Section 3 of [RFC8288]. The "value", "rel", and "href" JSON values MUST be specified. All other JSON values are OPTIONAL.¶
Example "links" member for the "ext2-0.1" extension version identifier:¶
"links": [
{
"value": "https://ext2.example/ext2-01.txt",
"rel": "describedby",
"href": "https://ext2.example/ext2-01.txt",
"type": "text/plain"
}
]
Example response to /help query with "versioning_help" and "versioning_data" members and no client specified versioning in the /help query "https://example.com/rdap/help":¶
{
"rdapConformance": [
"rdap_level_0",
"versioning",
"opaque_ext1",
"opaque_ext2",
"point_ext1",
"point_ext2"
],
"versioning_help": [
{
"extension": "rdap_level_0",
"type": "opaque"
},
{
"extension": "versioning",
"type": "point",
"versions": [
{
"version": "versioning-0.3"
},
{
"version": "versioning-0.7",
"default": true
}
]
},
{
"extension": "opaque_ext1",
"type": "opaque",
"successor": "opaque_ext2",
"default": true,
"end": "2026-12-31T23:59:59Z",
"links": [
{
"value": "https://ext1.example/opaque_ext1.txt",
"rel": "describedby",
"href": "https://ext1.example/paque_ext1.txt",
"type": "text/plain"
}
]
},
{
"extension": "opaque_ext2",
"type": "opaque",
"predecessor": "opaque_ext1",
"default": false,
"start": "2026-12-01T23:59:59Z",
"links": [
{
"value": "https://ext2.example/opaque_ext2.txt",
"rel": "describedby",
"href": "https://ext2.example/paque_ext2.txt",
"type": "text/plain"
}
]
},
{
"extension": "point_ext1",
"type": "point",
"versions": [
{
"version": "point_ext1-0.1",
"end": "2026-12-31T23:59:59Z"
},
{
"version": "point_ext1-1.0",
"default": true
},
{
"version": "point_ext1-1.1",
"start": "2026-12-31T23:59:59Z"
}
]
},
{
"extension": "point_ext2",
"type": "point",
"versions": [
{
"version": "point_ext2-0.1",
"end": "2026-12-31T23:59:59Z",
"links": [
{
"value": "https://ext2.example/doc/html/point_ext2-01.txt",
"rel": "describedby",
"href": "https://ext2.example/doc/html/point_ext2-01.txt",
"type": "text/plain"
}
]
}
]
},
{
"extension": "point_ext3",
"type": "point",
"versions": [
{
"version": "point_ext3-1.0",
"start": "2026-12-31T23:59:59Z"
}
]
}
],
"versioning_data": [
{
"extension": "rdap_level_0",
"type": "opaque",
"version": "rdap_level_0"
},
{
"extension": "versioning",
"type": "point",
"version": "versioning-0.7"
}
]
}
Example response to /help query with the "versioning_help" and "versioning" members and client specified "versioning-0.3" extension version in the /help query "https://example.com/rdap/help?versioning=versioning-0.3". The "versioning-0.3" extension version uses the "versioning" member and not the "versioning_data" member.¶
{
"rdapConformance": [
"rdap_level_0",
"versioning",
"opaque_ext1",
"opaque_ext2",
"point_ext1",
"point_ext2"
],
"versioning_help": [
{
"extension": "rdap_level_0",
"type": "opaque"
},
{
"extension": "versioning",
"type": "semantic",
"versions": [
{
"version": "versioning-0.3"
},
{
"version": "versioning-0.7",
"default": true
}
]
},
{
"extension": "opaque_ext1",
"type": "opaque",
"versions": [
{
"version": "opaque_ext1",
"end": "2026-12-31T23:59:59Z"
}
],
},
{
"extension": "opaque_ext2",
"type": "opaque",
"versions": [
{
"version": "opaque_ext2",
"start": "2026-12-31T23:59:59Z",
"links": [
{
"value": "https://ext2.example/doc/html/opaque_ext2.txt",
"rel": "describedby",
"href": "https://ext2.example/doc/html/opaque_ext2.txt",
"type": "text/plain"
}
]
}
],
},
{
"extension": "point_ext1",
"type": "semantic",
"versions": [
{
"version": "point_ext1-0.1",
"end": "2026-12-31T23:59:59Z"
},
{
"version": "point_ext1-1.0",
"default": true
},
{
"version": "point_ext1-1.1",
"start": "2026-12-31T23:59:59Z"
}
]
},
{
"extension": "point_ext2",
"type": "semantic",
"versions": [
{
"version": "point_ext2-0.1",
"end": "2026-12-31T23:59:59Z",
"links": [
{
"value": "https://ext2.example/doc/html/point_ext2-01.txt",
"rel": "describedby",
"href": "https://ext2.example/doc/html/point_ext2-01.txt",
"type": "text/plain"
}
]
}
]
},
{
"extension": "point_ext3",
"type": "semantic",
"versions": [
{
"version": "point_ext3-1.0",
"start": "2026-12-31T23:59:59Z"
}
]
}
],
"versioning": [
{
"extension": "rdap_level_0",
"type": "opaque",
"version": "rdap_level_0"
},
{
"extension": "versioning",
"type": "point",
"version": "versioning-0.3"
}
]
}
The "versioning_data" member MUST be added to the RDAP response when there is one or more RDAP extension fields. The "versioning_data" member is included as a member of the object class in a lookup response, such as the object classes defined in [RFC9083], and as a member of the object instances in a search response, such as the object instances defined in [RFC9083], and as a member of the response to a /help query, such as shown in Response to /help Query with No Client Specified Versioning (Figure 7). The "versioning" member contains an array of versioning objects with the following child members:¶
Example domain lookup response with "versioning_data" member and no client specified versioning in the lookup query "https://example.com/rdap/domain/versioning.example":¶
{
"rdapConformance": [
"rdap_level_0",
"versioning",
"point_ext1",
"opaque_ext2"
],
"objectClassName": "domain",
"handle": "XXXX",
"ldhName": "versioning.example",
"links": [
{
"value": "https://example.net/domain/versioning.example",
"rel": "self",
"href": "https://example.net/domain/versioning.example",
"type": "application/rdap+json"
}
],
"status": [
"ok"
],
"events": [
{
"eventAction": "registration",
"eventDate": "1990-12-31T23:59:59Z"
},
{
"eventAction": "expiration",
"eventDate": "2025-12-31T23:59:59Z"
}
],
"point_ext1": {
"value": "example 1",
"newoptionalstring": "new value"
},
"opaque_ext2": {
"name": "example 2"
},
"versioning_data": [
{
"extension": "rdap_level_0",
"type": "opaque",
"version": "rdap_level_0"
},
{
"extension": "versioning",
"type": "point",
"version": "versioning-0.7"
},
{
"extension": "point_ext1",
"type": "point",
"version": "point_ext1-1.0"
},
{
"extension": "opaque_ext2",
"type": "opaque",
"version": "opaque_ext2"
}
]
}
Example domain lookup response with "versioning_data" member and client specified "point_ext1-0.1" extension version in the lookup query "https://example.com/rdap/domain/versioning.example?versioning=point_ext1-0.1":¶
{
"rdapConformance": [
"rdap_level_0",
"versioning",
"point_ext1",
"opaque_ext2"
],
"objectClassName": "domain",
"handle": "XXXX",
"ldhName": "versioning.example",
"links": [
{
"value": "https://example.net/domain/versioning.example",
"rel": "self",
"href": "https://example.net/domain/versioning.example",
"type": "application/rdap+json"
}
],
"status": [
"ok"
],
"events": [
{
"eventAction": "registration",
"eventDate": "1990-12-31T23:59:59Z"
},
{
"eventAction": "expiration",
"eventDate": "2025-12-31T23:59:59Z"
}
],
"point_ext1": {
"value": "example 1"
},
"opaque_ext2": {
"name": "example 2"
},
"versioning_data": [
{
"extension": "rdap_level_0",
"type": "opaque",
"version": "rdap_level_0"
},
{
"extension": "versioning",
"type": "point",
"version": "versioning-0.7"
},
{
"extension": "point_ext1",
"type": "point",
"version": "point_ext1-0.1"
},
{
"extension": "opaque_ext2",
"type": "opaque",
"version": "opaque_ext2"
}
]
}
Example domain lookup response with "versioning_data" member and client specified "point_ext1-0.1" and "opaque_ext2" extension versions in the lookup query "https://example.com/rdap/domain/versioning.example?versioning=point_ext1-0.1,opaque_ext2":¶
{
"rdapConformance": [
"rdap_level_0",
"versioning",
"point_ext1",
"opaque_ext2"
],
"objectClassName": "domain",
"handle": "XXXX",
"ldhName": "versioning.example",
"links": [
{
"value": "https://example.net/domain/versioning.example",
"rel": "self",
"href": "https://example.net/domain/versioning.example",
"type": "application/rdap+json"
}
],
"status": [
"ok"
],
"events": [
{
"eventAction": "registration",
"eventDate": "1990-12-31T23:59:59Z"
},
{
"eventAction": "expiration",
"eventDate": "2025-12-31T23:59:59Z"
}
],
"point_ext1": {
"value": "example 1"
},
"opaque_ext2": {
"name": "example 2"
},
"versioning_data": [
{
"extension": "rdap_level_0",
"type": "opaque",
"version": "rdap_level_0"
},
{
"extension": "versioning",
"type": "point",
"version": "versioning-0.7"
},
{
"extension": "point_ext1",
"type": "point",
"version": "point_ext1-0.1"
},
{
"extension": "opaque_ext2",
"type": "opaque",
"version": "opaque_ext2"
}
]
}
Extensions are identified using the Extension Identifier, defined in [RFC7480], and the versioning extension supports a branch of extension versions based on the versioning type chosen. An example is the use of the Point Versioning (Section 5.2) with the "point_ext1" Extension Identifier that includes the extension version objects "point_ext1-0.1", "point_ext1-1.0", and "point_ext1-1.1". The extension branches can be related in a predecessor and successor chain, which enables versioning relationships of extensions using the Opaque Versioning (Section 5.1) and extensions that transition from one versioning type to another, such as transitioning from Opaque Versioning (Section 5.1) to Point Versioning (Section 5.2) or vice-versa. Since RDAP extensions using the Extension Identifier don't have any explicitly-defined versioning scheme, defining the predecessor and successor chain of extensions enables the server to signal the supported set of extensions and the versioning relationship independent of the versioning type chosen by the RDAP extensions. The "predessor" and "successor" members of the extension objects of the "versioning_help" Member (Section 3.3.2) defines the versioning relationships.¶
Versioning Types are extensible by formally defining the Extension Version Identifier, how the Versioning Type is represented in the "versioning_help" member (Section 3.3.2), and how the Versioning Type is represented in the "versioning" member (Section 3.3.2). The definition of the extension version identifier determines how the Versioning Type is represented in the Extension Versioning Request (Section 3.2). Each Versioning Type needs to have a unique "versioning" RDAP JSON Values Registry Type field value. This document pre-defines two Versioning Types with Opaque Versioning (Section 5.1) and Point Versioning (Section 5.2). Other Versioning Types can be defined and registered in the RDAP JSON Values Registry.¶
Opaque Versioning is defined in Section 8 of [I-D.ietf-regext-rdap-extensions], to support RDAP extensions that are identified using the Extension Identifier included in the RDAP Conformance and is the base Versioning Type that can be applied to any RDAP extension. All RDAP extensions are registered in the RDAP Extensions Registry using the Extension Identifier in [RFC7480], which is the basis for other Versioning Types. An RDAP Extension that supports another Versioning Type, such as the Point Versioning (Section 5.2), MAY be referred to using Opaque Versioning in the Extension Versioning Request (Section 3.2) and the server returns the extension version with the "default" (Section 3.3.2) member set to true.¶
Example reference to Opaque Versioning of the "versioning" extension:¶
The string literal "rdap_level_0" included in the RDAP Conformance data structure, defined in Section 4.1 of [RFC9083], is a special form of Opaque Versioning that signifies the version of the RDAP protocol itself. The "rdap_level_0" literal is treated as an Opaque Extension Version Identifier (Section 5.1.1) and included in both the "versioning_help" member (Section 3.3.2) and the "versioning_data" member (Section 3.3.3). Future versions of the RDAP protocol, such as "rdap_level_1", can be defined in the future and is treated as a string literal in a similar fashion as "rdap_level_0", but MAY use a different Versioning Type.¶
The Opaque Extension Version Identifier directly matches the Extension Identifier registered in the RDAP Extensions Registry. The ABNF for the Extension Identifier is defined in "Figure 1: ABNF for JSON Names" of [RFC7480].¶
Example Opaque Extension Versioning Identifiers:¶
For an RDAP extension that only supports Opaque Extension Versioning, there is only a single extension version. All of the members of the "versioning_help" member (Section 3.3.2) are supported with Opaque Versioning, but there will be only a single "versions" member object that has the "version" member matching the "extension" member value. Clients can leverage the Extension Version Identifier value in the Extension Versioning Request (Section 3.2) for Opaque Versioning.¶
Example response to /help query with "versioning_help" and "versioning_data" members with support for only Opaque Versioning in the /help query "https://example.com/rdap/help":¶
{
"rdapConformance": [
"rdap_level_0",
"versioning",
"opaque_ext1",
"opaque_ext2"
],
"versioning_help": [
{
"extension": "rdap_level_0",
"type": "opaque"
},
{
"extension": "versioning",
"type": "opaque"
},
{
"extension": "opaque_ext1",
"type": "opaque",
"successor": "opaque_ext2",
"default": true,
"end": "2026-12-31T23:59:59Z",
"links": [
{
"value": "https://ext1.example/opaque_ext1.txt",
"rel": "describedby",
"href": "https://ext1.example/paque_ext1.txt",
"type": "text/plain"
}
]
},
{
"extension": "opaque_ext2",
"type": "opaque",
"predecessor": "opaque_ext1",
"default": false,
"start": "2026-12-01T23:59:59Z",
"links": [
{
"value": "https://ext2.example/opaque_ext2.txt",
"rel": "describedby",
"href": "https://ext2.example/paque_ext2.txt",
"type": "text/plain"
}
]
}
],
"versioning": [
{
"extension": "versioning",
"type": "opaque"
}
]
}
All of the members of the "versioning_data" member (Section 3.3.3) are supported with Opaque Versioning, where the "extension" and "version" members are both set with the Extension Identifier and the "type" is set to "opaque". The Response to /help Query with only Opaque Versioning (Figure 12) includes an example of the "versioning" extension represented using Opaque Versioning.¶
The Point Versioning uses a subset of the Semantic Versioning [SemVer] rules since it's associated with the versioning of an extension interface and not code, where the patch version, pre-release version, and build metadata are not used. RDAP versioning is only associated with changes to the protocol interface that is the public API of [SemVer], so there is no concept of patching, pre-release, and build metadata information. Only the [SemVer] major version and minor version are used for Extension Versioning, and is based on the stability of the extension as opposed to backward compatibility. The RDAP extension given a version number MAJOR.MINOR, increment the:¶
The following are the Extension Versioning rules based on modifications to the Point Versioning [SemVer] rules:¶
Precedence refers to how versions are compared to each other when ordered.¶
The Point Versioning Identifier defines the versioning ABNF rule in Extension Version Identifier ABNF (Figure 1) to include the major and minor version of the extension that follows the modified Point Versioning [SemVer] rules.¶
point-version-identifier = name versioning ; "name" ABNF rule from RFC 7480 versioning = "-" major "." minor major = numeric-identifier minor = numeric-identifier numeric-identifier = "0" / positive-digit *DIGIT positive-digit = %x31-39 ; 1-9
Example Point Extension Versioning Identifiers:¶
For an RDAP extension that supports Point Extension Versioning, there can be many Extension Versioning Identifiers associated with the Extension Identifier, so the "versions" member of the "versioning_help" member can include a list of more than one extension version object. All of the members of the "versioning_help" member (Section 3.3.2) are supported with Point Versioning.¶
Example response to /help query with "versioning_help" and "versioning_data" members with support for Point Versioning in the /help query "https://example.com/rdap/help":¶
{
"rdapConformance": [
"rdap_level_0",
"versioning",
"point_ext1",
"point_ext2"
],
"versioning_help": [
{
"extension": "rdap_level_0",
"type": "opaque"
},
{
"extension": "versioning",
"type": "point",
"versions": [
{
"version": "versioning-0.3"
},
{
"version": "versioning-0.7",
"default": true
}
]
},
{
"extension": "point_ext1",
"type": "point",
"versions": [
{
"version": "point_ext1-0.1",
"end": "2026-12-31T23:59:59Z"
},
{
"version": "point_ext1-1.0",
"default": true
},
{
"version": "point_ext1-1.1",
"start": "2026-12-31T23:59:59Z"
}
]
},
{
"extension": "point_ext2",
"type": "point",
"versions": [
{
"version": "point_ext2-0.1",
"end": "2026-12-31T23:59:59Z",
"links": [
{
"value": "https://ext2.example/point_ext2-01.txt",
"rel": "describedby",
"href": "https://ext2.example/point_ext2-01.txt",
"type": "text/plain"
}
]
}
]
},
{
"extension": "point_ext3",
"type": "point",
"versions": [
{
"version": "point_ext3-1.0",
"start": "2026-12-31T23:59:59Z"
}
]
}
],
"versioning_data": [
{
"extension": "rdap_level_0",
"type": "opaque"
},
{
"extension": "versioning",
"type": "point",
"versions": [
{
"version": "versioning-0.7"
}
]
}
]
}
All of the members of the "versioning_data" member (Section 3.3.3) are supported with Point Versioning, where the "extension" member is set with the Extension Identifier, the "version" member of the extension included in the response is set with Point Extension Version Identifier (Section 5.2.1), and the "type" is set to "point". The Response to /help Query with only Point Versioning (Figure 14) includes an example of the "versioning" extension represented using Point Versioning with "versioning-0.7".¶
This section covers considerations for extensions that support the versioning extension and for defining new Versioning Types.¶
All extensions support Opaque Versioning (Section 5.1) by default and MAY support other forms for Versioning Types, such as the Point Versioning (Section 5.2). The following are considerations for the servers that support the versioning extension:¶
The following are considerations for the definition of new Versioning Types in a Versioning Type Specification. The Opaque Versioning (Section 5.1) and Point Versioning (Section 5.2) with the associated RDAP JSON Values Registry (Section 8.2) registrations are concrete examples of a Versioning Type Specification. The Versioning Type Specification MUST include the following:¶
The introduction of a new version of an RDAP extension that can change the extension interface by including new backward compatible features and non-backward compatible changes to existing features that can disrupt clients that require the new features and clients that are dependent on the old interface. To minimize interoperability issues and to facilitate a smooth migration, servers implementing such transitions SHOULD adopt a staged deployment strategy that allows both existing and updated clients to continue operating during the migration period. The following sections include a non-exhaustive list of transition considerations for servers to choose from and for clients to recognize in negotiating the transition between extension versions, which can apply across many versioning types. A versioning type SHOULD define a Transaction Considerations section that identify and customize the applicable transition considerations in this section or that defines new transition considerations that apply to that versioning type.¶
Rather than transitioning directly from an older version of an extension to a new incompatible version, a server SHOULD perform the migration in two steps:¶
The duration of the intermediate phase SHOULD be sufficient to allow client implementations to migrate to the new version. During this period, servers SHOULD clearly indicate which protocol elements are deprecated and which are intended to replace them. Such information SHOULD be made available through the versioning_help member of the RDAP /help response defined by this document, so that clients can discover the server's migration and deprecation policy and adapt their behavior accordingly.¶
For example, if a breaking change modifies the type or semantics of a JSON member defined by an RDAP extension, the intermediate version SHOULD expose both the deprecated JSON member and a replacement JSON member having a different name. Clients supporting only the previous version continue to use the deprecated member, while clients supporting the new version use the replacement member. Once the deprecation period has expired, the target version removes the deprecated member and retains only the replacement member.¶
A similar approach SHOULD be applied to other extension points, including query parameters, path segments, media type parameters, and any other RDAP protocol elements whose incompatible modification would otherwise require a direct migration.¶
During the migration period, servers SHOULD use the client's version selection preferences to determine the most appropriate representation to return. In particular, servers SHOULD consider:¶
When a client explicitly requests the deprecated version, the server SHOULD continue to provide a representation compatible with that version for the duration of the deprecation period. When a client requests the new version, or indicates support for it, the server SHOULD return the representation defined by the intermediate or target version, as appropriate.¶
This staged migration strategy allows servers to introduce incompatible changes while avoiding unnecessary disruption to deployed clients. It also encourages incremental client upgrades, reduces the need for abrupt protocol transitions, and aligns with the general principle that protocol evolution should minimize interoperability impact on existing implementations.¶
A server can support multiple extension versions in parallel, with implementation of a default version that changes during the transition, and with the option for the client to choose the desired extension version to use in the query. With support for extension relationships, the default version can be specified for multiple versioning types (Opaque Versioning (Section 5.1) and Point Versioning (Section 5.2)) with overlapping “start” and “end” date and times. The following are the transition steps to provide a smooth transition from an old extension version to a new extension version with the transition signaling done via ("versioning_help" Member (Section 3.3.2). For example purposes, Point Versioning is used with the extension version identifiers “versioning-0.6” as the old version and “versioning-0.7” as the new version.¶
By following the steps above, new extension version can be added with a transition period that includes overlap support and the changing of the default version.¶
This extension supports the following Versioning Types:¶
IANA is requested to register the following value in the RDAP Extensions Registry:¶
Section 10.2 of [RFC9083] defines the RDAP JSON Values Registry with pre-defined Type field values and the use of the "Expert Review" policy defined in [RFC8126]. This specification defines a new "versioning" RDAP JSON Values Registry Type field value that can be used to register pre-defined Versioning Types values. The registered "versioning_data" value is referenced using the "type" field of the "versioning" field (Section 3.3.3) or "versioning_help" field object (Section 3.3.2). IANA is instructed to update the RDAP JSON Values Registry to accept the additional "versioning" type field values.¶
The following values should be registered by the IANA in the RDAP JSON Values Registry described in [RFC9083]:¶
The RDAP extensions available to clients can be subject to server disclosure and authorization policies. Inclusion of available RDAP extensions and their available versions in the "versioning_help" member, defined in Section 3.3.2, of the RDAP help response and inclusion of the RDAP extensions in the RDAP response with the "versioning_data" member, defined in Section 3.3.3, can be dependent on authentication and authorization of the client by the server.¶
NOTE: Please remove this section and the reference to RFC 7942 prior to publication as an RFC.¶
The authors wish to thank the following persons for their feedback and suggestions: Scott Hollenbeck, Pawel Kowalik, Andy Newton, Jasdip Singh , and Maarten Wullink.¶
Restructure the draft to support the features of providing versioning meta-data in the help response, providing extension versioning information in the query response, and provide the ability for the client to specify the desired set of extension versions in the query with an extensible set of versioning types. The following changes apply:¶
Updates based on verbal feedback provided by Andy Newton, Jasdip Singh, Pawel Kowalik, and Maarten Wullink at IETF-124:¶