summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8982.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc8982.txt')
-rw-r--r--doc/rfc/rfc8982.txt528
1 files changed, 528 insertions, 0 deletions
diff --git a/doc/rfc/rfc8982.txt b/doc/rfc/rfc8982.txt
new file mode 100644
index 0000000..b6257a1
--- /dev/null
+++ b/doc/rfc/rfc8982.txt
@@ -0,0 +1,528 @@
+
+
+
+
+Internet Engineering Task Force (IETF) M. Loffredo
+Request for Comments: 8982 M. Martinelli
+Category: Standards Track IIT-CNR/Registro.it
+ISSN: 2070-1721 February 2021
+
+
+ Registration Data Access Protocol (RDAP) Partial Response
+
+Abstract
+
+ The Registration Data Access Protocol (RDAP) does not include
+ capabilities to request partial responses. Servers will only return
+ full responses that include all of the information that a client is
+ authorized to receive. A partial response capability that limits the
+ amount of information returned, especially in the case of search
+ queries, could bring benefits to both clients and servers. This
+ document describes an RDAP query extension that allows clients to
+ specify their preference for obtaining a partial response.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc8982.
+
+Copyright Notice
+
+ Copyright (c) 2021 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 Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 1.1. Conventions Used in This Document
+ 2. RDAP Path Segment Specification
+ 2.1. Subsetting Metadata
+ 2.1.1. RDAP Conformance
+ 2.1.2. Representing Subsetting Links
+ 3. Dealing with Relationships
+ 4. Basic Field Sets
+ 5. Negative Answers
+ 6. IANA Considerations
+ 7. Security Considerations
+ 8. References
+ 8.1. Normative References
+ 8.2. Informative References
+ Appendix A. Approaches to Partial Response Implementation
+ A.1. Specific Issues Raised by RDAP
+ Acknowledgements
+ Authors' Addresses
+
+1. Introduction
+
+ The use of partial responses in RESTful API [REST] design is very
+ common. The rationale is quite simple: instead of returning objects
+ in API responses with all data fields, only a subset of the fields in
+ each result object is returned. The benefit is obvious: less data
+ transferred over the network means less bandwidth usage, faster
+ server responses, less CPU time spent both on the server and the
+ client, and less memory usage on the client.
+
+ Currently, RDAP does not provide a client with any way to request a
+ partial response. Servers can only provide the client with a full
+ response [RFC7483]. Servers cannot limit the amount of information
+ returned in a response based on a client's preferences, and this
+ creates inefficiencies.
+
+ The protocol described in this specification extends RDAP search
+ capabilities to enable partial responses through the provisioning of
+ predefined sets of fields that clients can submit to an RDAP service
+ by adding a new query parameter. The service is implemented using
+ the Hypertext Transfer Protocol (HTTP) [RFC7230] and the conventions
+ described in [RFC7480].
+
+1.1. Conventions Used in This Document
+
+ 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.
+
+2. RDAP Path Segment Specification
+
+ The path segment defined in this section is an OPTIONAL extension of
+ search path segments defined in [RFC7482]. This document defines an
+ RDAP query parameter, "fieldSet", whose value is a non-empty string
+ identifying a server-defined set of fields returned in place of the
+ full response. The field sets supported by a server are usually
+ described in out-of-band documents (e.g., RDAP profile) together with
+ other features. Moreover, this document defines in Section 2.1 an
+ in-band mechanism by means of which servers can provide clients with
+ basic information about the supported field sets.
+
+ The following is an example of an RDAP query including the "fieldSet"
+ parameter:
+
+ https://example.com/rdap/domains?name=example*.com&fieldSet=afieldset
+
+ This solution can be implemented by RDAP providers with less effort
+ than field selection and is easily requested by clients. The
+ considerations that have led to this solution are described in more
+ detail in Appendix A.
+
+2.1. Subsetting Metadata
+
+ According to most advanced principles in REST design, collectively
+ known as "Hypermedia as the Engine of Application State" (HATEOAS)
+ [HATEOAS], a client entering a REST application through an initial
+ URI should use server-provided links to dynamically discover
+ available actions and access the resources it needs. In this way,
+ the client is not required to have prior knowledge of the service
+ nor, consequently, to hard-code the URIs of different resources.
+ This allows the server to make URI changes as the API evolves without
+ breaking clients. Definitively, a REST service should be as self-
+ descriptive as possible.
+
+ Therefore, servers implementing the query parameter described in this
+ specification SHOULD provide additional information in their
+ responses about the available field sets. Such information is
+ collected in a new JSON data structure named "subsetting_metadata"
+ containing the following properties:
+
+ "currentFieldSet": "String" (REQUIRED)
+ either the value of the "fieldSet" parameter as specified in the
+ query string, or the field set applied by default.
+
+ "availableFieldSets": "AvailableFieldSet[]" (OPTIONAL)
+ an array of objects, with each element describing an available
+ field set. The AvailableFieldSet object includes the following
+ members:
+
+ "name": "String" (REQUIRED)
+ the field set name.
+
+ "default": "Boolean" (REQUIRED)
+ indicator of whether the field set is applied by default. An
+ RDAP server MUST define only one default field set.
+
+ "description": "String" (OPTIONAL)
+ a human-readable description of the field set.
+
+ "links": "Link[]" (OPTIONAL)
+ an array of links as described in [RFC8288] containing the
+ query string that applies the field set (see Section 2.1.2).
+
+2.1.1. RDAP Conformance
+
+ Servers returning the "subsetting_metadata" section in their
+ responses MUST include "subsetting" in the rdapConformance array.
+
+2.1.2. Representing Subsetting Links
+
+ An RDAP server MAY use the "links" array of the "subsetting_metadata"
+ element to provide ready-made references [RFC8288] to the available
+ field sets (Figure 1). The target URI in each link is the reference
+ to an alternative to the current view of results identified by the
+ context URI.
+
+ The "value", "rel", and "href" JSON values MUST be specified. All
+ other JSON values are OPTIONAL.
+
+ {
+ "rdapConformance": [
+ "rdap_level_0",
+ "subsetting"
+ ],
+ ...
+ "subsetting_metadata": {
+ "currentFieldSet": "afieldset",
+ "availableFieldSets": [
+ {
+ "name": "anotherfieldset",
+ "description": "Contains some fields",
+ "default": false,
+ "links": [
+ {
+ "value": "https://example.com/rdap/domains?name=example*.com
+ &fieldSet=afieldset",
+ "rel": "alternate",
+ "href": "https://example.com/rdap/domains?name=example*.com
+ &fieldSet=anotherfieldset",
+ "title": "Result Subset Link",
+ "type": "application/rdap+json"
+ }
+ ]
+ },
+ ...
+ ]
+ },
+ ...
+ "domainSearchResults": [
+ ...
+ ]
+ }
+
+ Figure 1: Example of a "subsetting_metadata" Instance
+
+3. Dealing with Relationships
+
+ Representation of second-level objects within a field set produces
+ additional considerations. Since the representation of the topmost
+ returned objects will vary according to the field set in use, the
+ response may contain no relationships (e.g., for an abbreviated field
+ set) or may contain associated objects as in a normal RDAP query
+ response. Each field set can indicate the format of the additional
+ objects to be returned, in the same manner that the format of the
+ topmost objects is controlled by the field set.
+
+4. Basic Field Sets
+
+ This section defines three basic field sets that servers MAY
+ implement to facilitate their interaction with clients:
+
+ "id": The server provides only the key field; "handle" for entities,
+ and "ldhName" for domains and nameservers. If a returned domain
+ or nameserver is an Internationalized Domain Name (IDN) [RFC5890],
+ then the "unicodeName" field MUST additionally be included in the
+ response. This field set could be used when the client wants to
+ obtain a collection of object identifiers (Figure 2).
+
+ "brief": The field set contains the fields that can be included in a
+ "short" response. This field set could be used when the client is
+ asking for a subset of the full response that provides only basic
+ knowledge of each object.
+
+ "full": The field set contains all of the information the server can
+ provide for a particular object.
+
+ The "objectClassName" field is implicitly included in each of the
+ above field sets. RDAP providers SHOULD include a "links" field
+ indicating the "self" link relationship. RDAP providers MAY also add
+ any property providing service information.
+
+ Fields included in the "brief" and "full" field set responses MUST
+ take into account the user's access and authorization levels.
+
+ {
+ "rdapConformance": [
+ "rdap_level_0",
+ "subsetting"
+ ],
+ ...
+ "domainSearchResults": [
+ {
+ "objectClassName": "domain",
+ "ldhName": "example1.com",
+ "links": [
+ {
+ "value": "https://example.com/rdap/domain/example1.com",
+ "rel": "self",
+ "href": "https://example.com/rdap/domain/example1.com",
+ "type": "application/rdap+json"
+ }
+ ]
+ },
+ {
+ "objectClassName": "domain",
+ "ldhName": "example2.com",
+ "links": [
+ {
+ "value": "https://example.com/rdap/domain/example2.com",
+ "rel": "self",
+ "href": "https://example.com/rdap/domain/example2.com",
+ "type": "application/rdap+json"
+ }
+ ]
+ },
+ ...
+ ]
+ }
+
+ Figure 2: Example of RDAP Response According to the "id" Field Set
+
+5. Negative Answers
+
+ Each request including an empty or unsupported "fieldSet" value MUST
+ produce an HTTP 400 (Bad Request) response code. Optionally, the
+ response MAY include additional information regarding the supported
+ field sets in the HTTP entity body (Figure 3).
+
+ {
+ "errorCode": 400,
+ "title": "Field set 'unknownfieldset' is not valid",
+ "description": [
+ "Supported field sets are: 'afieldset', 'anotherfieldset'."
+ ]
+
+ }
+
+ Figure 3: Example of RDAP Error Response Due to an Invalid Field
+ Set Included in the Request
+
+6. IANA Considerations
+
+ IANA has registered the following value in the "RDAP Extensions"
+ registry:
+
+ Extension identifier: subsetting
+ Registry operator: Any
+ Published specification: RFC 8982
+ Contact: IETF <iesg@ietf.org>
+ Intended usage: This extension describes a best practice for partial
+ response provisioning.
+
+7. Security Considerations
+
+ A search query typically requires more server resources (such as
+ memory, CPU cycles, and network bandwidth) when compared to a lookup
+ query. This increases the risk of server resource exhaustion and
+ subsequent denial of service. This risk can be mitigated by
+ supporting the return of partial responses combined with other
+ strategies (e.g., restricting search functionality, limiting the rate
+ of search requests, and truncating and paging results).
+
+ Support for partial responses gives RDAP operators the ability to
+ implement data access control policies based on the HTTP
+ authentication mechanisms described in [RFC7481]. RDAP operators can
+ vary the information returned in RDAP responses based on a client's
+ access and authorization levels. For example:
+
+ * the list of fields for each set can differ based on the client's
+ access and authorization levels;
+
+ * the set of available field sets could be restricted based on the
+ client's access and authorization levels.
+
+ Servers can also define different result limits according to the
+ available field sets, so a more flexible truncation strategy can be
+ implemented. The new query parameter presented in this document
+ provides RDAP operators with a way to implement a server that reduces
+ inefficiency risks.
+
+8. References
+
+8.1. Normative References
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC5890] Klensin, J., "Internationalized Domain Names for
+ Applications (IDNA): Definitions and Document Framework",
+ RFC 5890, DOI 10.17487/RFC5890, August 2010,
+ <https://www.rfc-editor.org/info/rfc5890>.
+
+ [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
+ Protocol (HTTP/1.1): Message Syntax and Routing",
+ RFC 7230, DOI 10.17487/RFC7230, June 2014,
+ <https://www.rfc-editor.org/info/rfc7230>.
+
+ [RFC7480] Newton, A., Ellacott, B., and N. Kong, "HTTP Usage in the
+ Registration Data Access Protocol (RDAP)", RFC 7480,
+ DOI 10.17487/RFC7480, March 2015,
+ <https://www.rfc-editor.org/info/rfc7480>.
+
+ [RFC7481] Hollenbeck, S. and N. Kong, "Security Services for the
+ Registration Data Access Protocol (RDAP)", RFC 7481,
+ DOI 10.17487/RFC7481, March 2015,
+ <https://www.rfc-editor.org/info/rfc7481>.
+
+ [RFC7482] Newton, A. and S. Hollenbeck, "Registration Data Access
+ Protocol (RDAP) Query Format", RFC 7482,
+ DOI 10.17487/RFC7482, March 2015,
+ <https://www.rfc-editor.org/info/rfc7482>.
+
+ [RFC7483] Newton, A. and S. Hollenbeck, "JSON Responses for the
+ Registration Data Access Protocol (RDAP)", RFC 7483,
+ DOI 10.17487/RFC7483, March 2015,
+ <https://www.rfc-editor.org/info/rfc7483>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [RFC8288] Nottingham, M., "Web Linking", RFC 8288,
+ DOI 10.17487/RFC8288, October 2017,
+ <https://www.rfc-editor.org/info/rfc8288>.
+
+8.2. Informative References
+
+ [CQL] Whitaker, G., "Catnap Query Language Reference", commit
+ d4f402c, September 2017,
+ <https://github.com/gregwhitaker/catnap/wiki/Catnap-Query-
+ Language-Reference>.
+
+ [HATEOAS] Jedrzejewski, B., "HATEOAS - a simple explanation",
+ February 2018, <https://www.e4developer.com/2018/02/16/
+ hateoas-simple-explanation/>.
+
+ [REST] Fielding, R., "Architectural Styles and the Design of
+ Network-based Software Architectures", Ph.D. Dissertation,
+ University of California, Irvine, 2000,
+ <https://www.ics.uci.edu/~fielding/pubs/dissertation/
+ fielding_dissertation.pdf>.
+
+Appendix A. Approaches to Partial Response Implementation
+
+ Looking at the implementation experiences of partial responses
+ offered by data providers on the web, two approaches are observed:
+
+ * the client explicitly describes the data fields to be returned;
+
+ * the client describes a name identifying a server-defined set of
+ data fields.
+
+ The former is more flexible than the latter because clients can
+ specify all the data fields they need. However, it has some
+ drawbacks:
+
+ * Fields have to be declared according to a given syntax. This is a
+ simple task when the data structure of the object is flat, but it
+ is much more difficult when the object has a tree structure like
+ that of a JSON object. The presence of arrays and deep nested
+ objects complicate both the syntax definition of the query and,
+ consequently, the processing required on the server side.
+
+ * Clients need to recognize the returned data structure to avoid
+ cases when the requested fields are invalid.
+
+ * The request of some fields might not match the client's access and
+ authorization levels. Clients might request unauthorized fields,
+ and servers have to define a strategy for responding such as
+ always returning an error response or returning a response that
+ ignores the unauthorized fields.
+
+A.1. Specific Issues Raised by RDAP
+
+ In addition to those listed above, RDAP responses raise some specific
+ issues:
+
+ * Relevant entity object information is included in a jCard, but
+ such information cannot be easily selected because it is split
+ into the items of a jagged array.
+
+ * RDAP responses contain some properties providing service
+ information (e.g., rdapConformance, links, notices, remarks,
+ etc.), which are not normally selected but are just as important.
+ They could be returned anyway but, in this case, the server would
+ provide unrequested data.
+
+ It is possible to address these issues. For example, the Catnap
+ Query Language [CQL] is a comprehensive expression language that can
+ be used to customize the JSON response of a RESTful web service.
+ Application of CQL to RDAP responses would explicitly identify the
+ output fields that would be acceptable when a few fields are
+ requested but it would become very complicated when processing a
+ larger number of fields. In the following, two CQL expressions for a
+ domain search query are shown (Figure 4). In the first, only
+ objectClassName and ldhName are requested. In the second, the fields
+ of a possible WHOIS-like response are listed.
+
+ https://example.com/rdap/domains?name=example*.com
+ &fields=domainSearchResults(objectClassName,ldhName)
+
+ https://example.com/rdap/domains?name=example*.com
+ &fields=domainSearchResults(objectClassName,ldhName,
+ unicodeName,
+ status,
+ events(eventAction,eventDate),
+ entities(objectClassName,handle,roles),
+ nameservers(objectClassName,ldhName))
+
+ Figure 4: Examples of CQL Expressions for a Domain Search Query
+
+ The field set approach seems to facilitate RDAP interoperability.
+ Servers can define basic field sets that, if known to clients, can
+ increase the probability of obtaining a valid response. The usage of
+ field sets makes the query string less complex. Moreover, the
+ definition of predefined sets of fields makes it easier to establish
+ result limits.
+
+ Finally, considering that there is no real need for RDAP users to
+ have the maximum flexibility in defining all the possible sets of
+ logically connected fields (e.g., users interested in domains usually
+ need to know the status, the creation date, and the expiry date of
+ each domain), the field set approach is preferred.
+
+Acknowledgements
+
+ The authors would like to acknowledge Scott Hollenbeck, Tom Harrison,
+ Karl Heinz Wolf, Jasdip Singh, Patrick Mevzek, Benjamin Kaduk, Roman
+ Danyliw, Murray Kucherawy, Erik Kline, and Robert Wilton for their
+ contribution to this document.
+
+Authors' Addresses
+
+ Mario Loffredo
+ IIT-CNR/Registro.it
+ Via Moruzzi,1
+ 56124 Pisa
+ Italy
+
+ Email: mario.loffredo@iit.cnr.it
+ URI: https://www.iit.cnr.it
+
+
+ Maurizio Martinelli
+ IIT-CNR/Registro.it
+ Via Moruzzi,1
+ 56124 Pisa
+ Italy
+
+ Email: maurizio.martinelli@iit.cnr.it
+ URI: https://www.iit.cnr.it