| rfc9512.original | rfc9512.txt | |||
|---|---|---|---|---|
| HTTPAPI R. Polli | Internet Engineering Task Force (IETF) R. Polli | |||
| Internet-Draft Digital Transformation Department, Italian Government | Request for Comments: 9512 DTD, Italian Government | |||
| Intended status: Informational E. Wilde | Category: Informational E. Wilde | |||
| Expires: 2 March 2024 Axway | ISSN: 2070-1721 Axway | |||
| E. Aro | E. Aro | |||
| Mozilla | Mozilla | |||
| 30 August 2023 | February 2024 | |||
| YAML Media Type | YAML Media Type | |||
| draft-ietf-httpapi-yaml-mediatypes-10 | ||||
| Abstract | Abstract | |||
| This document registers the application/yaml media type and the +yaml | This document registers the application/yaml media type and the +yaml | |||
| structured syntax suffix on the IANA Media Types registry, intended | structured syntax suffix with IANA. Both identify document | |||
| to be used to identify document components serialized according to | components that are serialized according to the YAML specification. | |||
| the YAML specification. | ||||
| About This Document | ||||
| This note is to be removed before publishing as an RFC. | ||||
| Status information for this document may be found at | ||||
| https://datatracker.ietf.org/doc/draft-ietf-httpapi-yaml-mediatypes/. | ||||
| Discussion of this document takes place on the HTTPAPI Working Group | ||||
| mailing list (mailto:httpapi@ietf.org), which is archived at | ||||
| https://mailarchive.ietf.org/arch/browse/httpapi/. Subscribe at | ||||
| https://www.ietf.org/mailman/listinfo/httpapi/. Working Group | ||||
| information can be found at https://datatracker.ietf.org/wg/httpapi/ | ||||
| about/. | ||||
| Source for this draft and an issue tracker can be found at | ||||
| https://github.com/ietf-wg-httpapi/mediatypes/labels/yaml. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
| provisions of BCP 78 and BCP 79. | published for informational purposes. | |||
| 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 | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Not all documents | |||
| approved by the IESG are candidates for any level of Internet | ||||
| Standard; see Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 2 March 2024. | 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/rfc9512. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Notational Conventions . . . . . . . . . . . . . . . . . 3 | 1.1. Notational Conventions | |||
| 1.2. Fragment identification . . . . . . . . . . . . . . . . . 4 | 1.2. Fragment Identification | |||
| 1.2.1. Fragment identification via alias nodes . . . . . . . 4 | 1.2.1. Fragment Identification via Alias Nodes | |||
| 2. Media Type and Structured Syntax Suffix registrations . . . . 5 | 2. Media Type and Structured Syntax Suffix Registrations | |||
| 2.1. Media Type application/yaml . . . . . . . . . . . . . . . 5 | 2.1. Media Type application/yaml | |||
| 2.2. The +yaml Structured Syntax Suffix . . . . . . . . . . . 6 | 2.2. The +yaml Structured Syntax Suffix | |||
| 3. Interoperability Considerations . . . . . . . . . . . . . . . 7 | 3. Interoperability Considerations | |||
| 3.1. YAML is an Evolving Language . . . . . . . . . . . . . . 7 | 3.1. YAML Is an Evolving Language | |||
| 3.2. YAML streams . . . . . . . . . . . . . . . . . . . . . . 7 | 3.2. YAML Streams | |||
| 3.3. Filename extension . . . . . . . . . . . . . . . . . . . 8 | 3.3. Filename Extension | |||
| 3.4. YAML and JSON . . . . . . . . . . . . . . . . . . . . . . 8 | 3.4. YAML and JSON | |||
| 3.5. Fragment identifiers . . . . . . . . . . . . . . . . . . 9 | 3.5. Fragment Identifiers | |||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | 4. Security Considerations | |||
| 4.1. Arbitrary Code Execution . . . . . . . . . . . . . . . . 10 | 4.1. Arbitrary Code Execution | |||
| 4.2. Resource Exhaustion . . . . . . . . . . . . . . . . . . . 10 | 4.2. Resource Exhaustion | |||
| 4.3. YAML streams . . . . . . . . . . . . . . . . . . . . . . 11 | 4.3. YAML Streams | |||
| 4.4. Expressing booleans . . . . . . . . . . . . . . . . . . . 11 | 4.4. Expressing Booleans | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 5. IANA Considerations | |||
| 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 6. References | |||
| 6.1. Normative References . . . . . . . . . . . . . . . . . . 12 | 6.1. Normative References | |||
| 6.2. Informative References . . . . . . . . . . . . . . . . . 13 | 6.2. Informative References | |||
| Appendix A. Examples related to fragment identifier | Appendix A. Examples Related to Fragment Identifier | |||
| interoperability . . . . . . . . . . . . . . . . . . . . 13 | Interoperability | |||
| A.1. Unreferenceable nodes . . . . . . . . . . . . . . . . . . 14 | A.1. Unreferenceable Nodes | |||
| A.2. Referencing a missing node . . . . . . . . . . . . . . . 14 | A.2. Referencing a Missing Node | |||
| A.3. Representation graph with anchors and cyclic | A.3. Representation Graph with Anchors and Cyclic References | |||
| references . . . . . . . . . . . . . . . . . . . . . . . 14 | Acknowledgements | |||
| Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 15 | Authors' Addresses | |||
| FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | ||||
| Change Log . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | ||||
| Since draft-ietf-httpapi-yaml-mediatypes-02 . . . . . . . . . . 17 | ||||
| Since draft-ietf-httpapi-yaml-mediatypes-01 . . . . . . . . . . 17 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 17 | ||||
| 1. Introduction | 1. Introduction | |||
| YAML [YAML] is a data serialization format that is capable of | YAML [YAML] is a data serialization format that is capable of | |||
| conveying one or multiple documents in a single presentation stream | conveying one or multiple documents in a single presentation stream | |||
| (e.g., a file or a network resource). It is widely used on the | (e.g., a file or a network resource). It is widely used on the | |||
| Internet, including in the API sector (e.g., see [OAS]), but a | Internet, including in the API sector (e.g., see [OAS]), but a | |||
| corresponding media type and structured syntax suffix had not | corresponding media type and structured syntax suffix had not | |||
| previously been registered by IANA. | previously been registered by IANA. | |||
| To increase interoperability when exchanging YAML streams, and | To increase interoperability when exchanging YAML streams and | |||
| leverage content negotiation mechanisms when exchanging YAML | leverage content negotiation mechanisms when exchanging YAML | |||
| resources, this specification registers the application/yaml media | resources, this specification registers the application/yaml media | |||
| type and the +yaml structured syntax suffix [MEDIATYPE]. | type and the +yaml structured syntax suffix [MEDIATYPE]. | |||
| Moreover, it provides security considerations and interoperability | Moreover, it provides security considerations and interoperability | |||
| considerations related to [YAML], including its relation with [JSON]. | considerations related to [YAML], including its relation with [JSON]. | |||
| 1.1. Notational Conventions | 1.1. Notational Conventions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. These words may also appear in this | capitals, as shown here. | |||
| document in lower case as plain English words, absent their normative | ||||
| meanings. | ||||
| The terms "content", "content negotiation", "resource", and "user | The terms "content negotiation" and "resource" in this document are | |||
| agent" in this document are to be interpreted as in [HTTP]. | to be interpreted as in [HTTP]. | |||
| The terms "fragment" and "fragment identifier" in this document are | The terms "fragment" and "fragment identifier" in this document are | |||
| to be interpreted as in [URI]. | to be interpreted as in [URI]. | |||
| The terms "presentation", "stream", "YAML document", "representation | The terms "presentation", "stream", "YAML document", "representation | |||
| graph", "tag", "serialization detail", "node", "alias node", "anchor" | graph", "tag", "serialization detail", "node", "alias node", | |||
| and "anchor name" in this document are to be interpreted as in | "anchor", and "anchor name" in this document are to be interpreted as | |||
| [YAML]. | in [YAML]. | |||
| Figures containing YAML code always start with the "%YAML 1.2" | Figures containing YAML code always start with the %YAML directive to | |||
| directive to improve readability. | improve readability. | |||
| 1.2. Fragment identification | 1.2. Fragment Identification | |||
| A fragment identifies a node in a stream. | A fragment identifies a node in a stream. | |||
| A fragment identifier starting with "*" is to be interpreted as a | A fragment identifier starting with "*" is to be interpreted as a | |||
| YAML alias node (see Section 1.2.1). | YAML alias node (see Section 1.2.1). | |||
| For single-document YAML streams, a fragment identifier that is empty | For single-document YAML streams, a fragment identifier that is empty | |||
| or that starts with "/" is to be interpreted as a JSON Pointer | or that starts with "/" is to be interpreted as a JSON Pointer | |||
| [JSON-POINTER] and is evaluated on the YAML representation graph, | [JSON-POINTER] and is evaluated on the YAML representation graph, | |||
| walking through alias nodes; in particular, the empty fragment | traversing alias nodes; in particular, the empty fragment identifier | |||
| identifier references the root node. This syntax can only reference | references the root node. This syntax can only reference the YAML | |||
| the YAML nodes that are on a path that is made up of nodes | nodes that are on a path that is made up of nodes interoperable with | |||
| interoperable with the JSON data model (see Section 3.4). | the JSON data model (see Section 3.4). | |||
| A fragment identifier is not guaranteed to reference an existing | A fragment identifier is not guaranteed to reference an existing | |||
| node. Therefore, applications SHOULD define how an unresolved alias | node. Therefore, applications SHOULD define how an unresolved alias | |||
| node ought to be handled. | node ought to be handled. | |||
| 1.2.1. Fragment identification via alias nodes | 1.2.1. Fragment Identification via Alias Nodes | |||
| This section describes how to use alias nodes (see Section 3.2.2.2 | This section describes how to use alias nodes (see Sections 3.2.2.2 | |||
| and 7.1 of [YAML]) as fragment identifiers to designate nodes. | and 7.1 of [YAML]) as fragment identifiers to designate nodes. | |||
| A YAML alias node can be represented in a URI fragment identifier by | A YAML alias node can be represented in a URI fragment identifier by | |||
| encoding it into bytes using UTF-8 [UTF-8], but percent-encoding of | encoding it into bytes using UTF-8 [UTF-8], but percent-encoding of | |||
| those characters is not allowed by the fragment rule in Section 3.5 | those characters is not allowed by the fragment rule in Section 3.5 | |||
| of [URI]. | of [URI]. | |||
| If multiple nodes would match a fragment identifier, the first | If multiple nodes match a fragment identifier, the first occurrence | |||
| occurrence of such match is selected. | of such a match is selected. | |||
| Users concerned with interoperability of fragment identifiers: | Users concerned with interoperability of fragment identifiers: | |||
| * SHOULD limit alias nodes to a set of characters that do not | * SHOULD limit alias nodes to a set of characters that do not | |||
| require encoding to be expressed as URI fragment identifiers: this | require encoding to be expressed as URI fragment identifiers (this | |||
| is generally possible since anchor names are a serialization | is generally possible since anchor names are a serialization | |||
| detail; | detail), and | |||
| * SHOULD NOT use alias nodes that match multiple nodes. | * SHOULD NOT use alias nodes that match multiple nodes. | |||
| In the example resource below, the relative reference (see | In the example resource below, the relative reference (see | |||
| Section 4.2 of [URI]) file.yaml#*foo identifies the first alias node | Section 4.2 of [URI]) file.yaml#*foo identifies the first alias node | |||
| *foo pointing to the node with value scalar and not the one in the | *foo pointing to the node with value scalar and not to the one in the | |||
| second document; whereas the relative reference file.yaml#*document_2 | second document, whereas the relative reference file.yaml#*document_2 | |||
| identifies the root node of the second document {one: [a, sequence]}. | identifies the root node of the second document {one: [a, sequence]}. | |||
| %YAML 1.2 | %YAML 1.2 | |||
| --- | --- | |||
| one: &foo scalar | one: &foo scalar | |||
| two: &bar | two: &bar | |||
| - some | - some | |||
| - sequence | - sequence | |||
| - items | - items | |||
| ... | ... | |||
| %YAML 1.2 | %YAML 1.2 | |||
| --- | --- | |||
| &document_2 | &document_2 | |||
| one: &foo [a, sequence] | one: &foo [a, sequence] | |||
| Figure 1: A YAML stream containing two YAML documents. | Figure 1: A YAML Stream Containing Two YAML Documents | |||
| 2. Media Type and Structured Syntax Suffix registrations | 2. Media Type and Structured Syntax Suffix Registrations | |||
| This section describes the information required to register the above | This section includes the information required for IANA to register | |||
| media type according to [MEDIATYPE] | the application/yaml media type and the +yaml structured syntax | |||
| suffix per [MEDIATYPE]. | ||||
| 2.1. Media Type application/yaml | 2.1. Media Type application/yaml | |||
| The media type for YAML text is application/yaml; the following | The media type for YAML is application/yaml; the following | |||
| information serves as the registration form for this media type. | information serves as the registration form for this media type. | |||
| Type name: application | Type name: application | |||
| Subtype name: yaml | Subtype name: yaml | |||
| Required parameters: N/A | Required parameters: N/A | |||
| Optional parameters: N/A; unrecognized parameters should be ignored | Optional parameters: N/A; unrecognized parameters should be ignored. | |||
| Encoding considerations: binary | Encoding considerations: binary | |||
| Security considerations: see Section 4 of this document | Security considerations: See Section 4 of this document. | |||
| Interoperability considerations: see Section 3 of this document | Interoperability considerations: See Section 3 of this document. | |||
| Published specification: [YAML], this document | Published specification: [YAML], this document | |||
| Applications that use this media type: Applications that need a | Applications that use this media type: Applications that need a | |||
| human-friendly, cross language, Unicode based data serialization | human-friendly, cross-language, and Unicode-based data | |||
| language designed around the common native data types of dynamic | serialization language designed around the common data types of | |||
| programming languages. | dynamic programming languages. | |||
| Fragment identifier considerations: See Section 1.2 of this document | Fragment identifier considerations: See Section 1.2 of this | |||
| document. | ||||
| Additional information: | Additional information: | |||
| * Deprecated alias names for this type: application/x-yaml, text/ | Deprecated alias names for this type: application/x-yaml, text/ | |||
| yaml, text/x-yaml. These names are used, but not registered. | yaml, and text/x-yaml. These names are used but are not | |||
| registered. | ||||
| * Magic number(s) N/A | Magic number(s): N/A | |||
| File extension(s): "yaml" (preferred) and "yml". See Section 3.3 | ||||
| * File extension(s): "yaml" (preferred), "yml". See Section 3.3 of | of this document. | |||
| this document. | Macintosh file type code(s): N/A | |||
| Windows Clipboard Name: YAML | ||||
| * Macintosh file type code(s): N/A | ||||
| * Windows Clipboard Name: YAML | ||||
| Person and email address to contact for further information: See the | Person and email address to contact for further information: See the | |||
| Authors' Addresses section of this document. | Authors' Addresses section of this document. | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| Restrictions on usage: None. | Restrictions on usage: None | |||
| Author: See the Authors' Addresses section of this document. | Author: See the Authors' Addresses section of this document. | |||
| Change controller: IETF | Change controller: IETF | |||
| 2.2. The +yaml Structured Syntax Suffix | 2.2. The +yaml Structured Syntax Suffix | |||
| The suffix +yaml MAY be used with any media type whose representation | The suffix +yaml MAY be used with any media type whose representation | |||
| follows that established for application/yaml. The media type | follows that established for application/yaml. The structured syntax | |||
| structured syntax suffix registration form follows. See [MEDIATYPE] | suffix registration form follows. See [MEDIATYPE] for definitions of | |||
| for definitions of each of the registration form headings. | each part of the registration form. | |||
| Name: YAML Ain't Markup Language (YAML) | Name: YAML Ain't Markup Language (YAML) | |||
| +suffix: +yaml | +suffix: +yaml | |||
| References: [YAML], this document | References: [YAML], this document | |||
| Encoding considerations: Same as "application/yaml" | Encoding considerations: Same as application/yaml | |||
| Fragment identifier considerations: Differently from application/ | Interoperability considerations: Same as application/yaml | |||
| yaml, there is no fragment identification syntax defined for | ||||
| +yaml. | Fragment identifier considerations: Unlike application/yaml, there | |||
| is no fragment identification syntax defined for +yaml. | ||||
| A specific xxx/yyy+yaml media type needs to define the syntax and | A specific xxx/yyy+yaml media type needs to define the syntax and | |||
| semantics for fragment identifiers because the ones defined for | semantics for fragment identifiers because the ones defined for | |||
| "application/yaml" do not apply unless explicitly expressed. | application/yaml do not apply unless explicitly expressed. | |||
| Interoperability considerations: Same as "application/yaml" | ||||
| Security considerations: Same as "application/yaml" | Security considerations: Same as application/yaml | |||
| Contact: httpapi@ietf.org or art@ietf.org | Contact: httpapi@ietf.org or art@ietf.org | |||
| Author: See the Authors' Addresses section of this document | Author: See the Authors' Addresses section of this document. | |||
| Change controller: IETF | Change controller: IETF | |||
| 3. Interoperability Considerations | 3. Interoperability Considerations | |||
| 3.1. YAML is an Evolving Language | 3.1. YAML Is an Evolving Language | |||
| YAML is an evolving language and, over time, some features have been | YAML is an evolving language, and over time, some features have been | |||
| added and others removed. | added and others removed. | |||
| This [YAML] media type registration is independent of YAML version. | The application/yaml media type registration is independent of the | |||
| This allows content negotiation of version-independent YAML | YAML version. This allows content negotiation of version-independent | |||
| resources. | YAML resources. | |||
| Implementers concerned about features related to a specific YAML | Implementers concerned about features related to a specific YAML | |||
| version can specify it in YAML documents using the %YAML directive | version can specify it in YAML documents using the %YAML directive | |||
| (see Section 6.8.1 of [YAML]). | (see Section 6.8.1 of [YAML]). | |||
| 3.2. YAML streams | 3.2. YAML Streams | |||
| A YAML stream can contain zero or more YAML documents. | A YAML stream can contain zero or more YAML documents. | |||
| When receiving a multi-document stream, an application that only | When receiving a multi-document stream, an application that only | |||
| expects one-document streams, ought to signal an error instead of | expects single-document streams should signal an error instead of | |||
| ignoring the extra documents. | ignoring the extra documents. | |||
| Current implementations consider different documents in a stream | Current implementations consider different documents in a stream | |||
| independent, similarly to JSON Text Sequences (see [RFC7464]); | independent, similarly to JSON text sequences (see [RFC7464]); | |||
| elements such as anchors are not guaranteed to be referenceable | elements such as anchors are not guaranteed to be referenceable | |||
| across different documents. | across different documents. | |||
| 3.3. Filename extension | 3.3. Filename Extension | |||
| The "yaml" filename extension is the preferred one; it is the most | The "yaml" filename extension is the preferred one; it is the most | |||
| popular and widely used on the web. The "yml" filename extension is | popular and widely used on the web. The "yml" filename extension is | |||
| still used. The simultaneous usage of two filename extensions in the | still used. The simultaneous usage of two filename extensions in the | |||
| same context might cause interoperability issues (e.g., when both a | same context might cause interoperability issues (e.g., when both a | |||
| "config.yaml" and a "config.yml" are present). | "config.yaml" and a "config.yml" are present). | |||
| 3.4. YAML and JSON | 3.4. YAML and JSON | |||
| When using flow collection styles (see Section 7.4 of [YAML]) a YAML | When using flow collection styles (see Section 7.4 of [YAML]), a YAML | |||
| document could look like JSON [JSON], thus similar interoperability | document could look like JSON [JSON]; thus, similar interoperability | |||
| considerations apply. | considerations apply. | |||
| When using YAML as a more efficient format to serialize information | When using YAML as a more efficient format to serialize information | |||
| intended to be consumed as JSON, information not reflected in the | intended to be consumed as JSON, information not reflected in the | |||
| representation graph and classified as presentation or serialization | representation graph and classified as presentation or serialization | |||
| detail (see Section 3.2 of [YAML]) can be discarded. This includes | details (see Section 3.2 of [YAML]) can be discarded. This includes | |||
| comments (see Section 3.2.3.3 of [YAML]), directives, and alias nodes | comments (see Section 3.2.3.3 of [YAML]), directives, and alias nodes | |||
| (see Section 7.1 of [YAML]) that do not have a JSON counterpart. | (see Section 7.1 of [YAML]) that do not have a JSON counterpart. | |||
| %YAML 1.2 | %YAML 1.2 | |||
| --- | --- | |||
| # This comment will be lost | # This comment will be lost | |||
| # when serializing in JSON. | # when serializing in JSON. | |||
| Title: | Title: | |||
| type: string | type: string | |||
| maxLength: &text_limit 64 | maxLength: &text_limit 64 | |||
| Name: | Name: | |||
| type: string | type: string | |||
| maxLength: *text_limit # Replaced by the value 64. | maxLength: *text_limit # Replaced by the value 64. | |||
| Figure 2: JSON replaces alias nodes with static values. | Figure 2: JSON Replaces Alias Nodes with Static Values | |||
| Implementers need to ensure that relevant information will not be | Implementers need to ensure that relevant information will not be | |||
| lost during the processing. For example, they might consider | lost during processing. For example, they might consider alias nodes | |||
| acceptable that alias nodes are replaced by static values. | being replaced by static values as acceptable. | |||
| In some cases an implementer may want to define a list of allowed | In some cases, an implementer may want to define a list of allowed | |||
| YAML features, taking into account that the following ones might have | YAML features, taking into account that the following features might | |||
| interoperability issues with [JSON]: | have interoperability issues with [JSON]: | |||
| * multi-document YAML streams; | * multi-document YAML streams | |||
| * non UTF-8 encoding. Before encoding YAML streams in UTF-16 or | ||||
| * non-UTF-8 encoding. Before encoding YAML streams in UTF-16 or | ||||
| UTF-32, it is important to note that Section 8.1 of [JSON] | UTF-32, it is important to note that Section 8.1 of [JSON] | |||
| mandates the use of UTF-8 when exchanging JSON texts between | mandates the use of UTF-8 when exchanging JSON texts between | |||
| systems that are not part of a closed ecosystem, and that | systems that are not part of a closed ecosystem and that | |||
| Section 5.2 of [YAML] recommends the use of UTF-8; | Section 5.2 of [YAML] recommends the use of UTF-8. | |||
| * mapping keys that are not strings; | * mapping keys that are not strings | |||
| * circular references represented using anchor (see Section 4.2 and | * cyclic references represented using anchors (see Section 4.2 and | |||
| Figure 4); | Figure 4) | |||
| * .inf and .nan float values, since JSON does not support them; | * .inf and .nan float values, since JSON does not support them | |||
| * non-JSON types, including the ones associated with tags like | * non-JSON types, including the ones associated with tags like | |||
| !!timestamp that were included in the default schema of older YAML | !!timestamp that were included in the default schema of older YAML | |||
| versions; | versions | |||
| * tags in general, and specifically the ones that do not map to JSON | * tags in general, specifically ones that do not map to JSON types, | |||
| types like custom and local tags such as !!python/object and | e.g., custom and local tags such as !!python/object and !mytag | |||
| !mytag (see Section 2.4 of [YAML]); | (see Section 2.4 of [YAML]) | |||
| %YAML 1.2 | %YAML 1.2 | |||
| --- | --- | |||
| non-json-keys: | non-json-keys: | |||
| 0: a number | 0: a number | |||
| [0, 1]: a sequence | [0, 1]: a sequence | |||
| ? {k: v} | ? {k: v} | |||
| : a map | : a map | |||
| --- | --- | |||
| non-json-keys: | non-json-keys: | |||
| !date 2020-01-01: a timestamp | !date 2020-01-01: a timestamp | |||
| non-json-value: !date 2020-01-01 | non-json-value: !date 2020-01-01 | |||
| ... | ... | |||
| Figure 3: Example of mapping keys and values not supported in | Figure 3: Example of Mapping Keys and Values Not Supported in | |||
| JSON in a multi- document YAML stream | JSON in a Multi-Document YAML Stream | |||
| 3.5. Fragment identifiers | 3.5. Fragment Identifiers | |||
| To allow fragment identifiers to traverse alias nodes, the YAML | To allow fragment identifiers to traverse alias nodes, the YAML | |||
| representation graph needs to be generated before the fragment | representation graph needs to be generated before the fragment | |||
| identifier evaluation. It is important that this evaluation will not | identifier evaluation. It is important that this evaluation does not | |||
| cause the issues mentioned in Section 3.4 and in Security | cause the issues mentioned in Sections 3.4 and 4, such as infinite | |||
| considerations (Section 4) such as infinite loops and unexpected code | loops and unexpected code execution. | |||
| execution. | ||||
| Implementers need to consider that the YAML version and supported | Implementers need to consider that the YAML version and supported | |||
| features (e.g., merge keys) can affect the generation of the | features (e.g., merge keys) can affect the generation of the | |||
| representation graph (see Figure 9). | representation graph (see Figure 9). | |||
| In Section 2.1, this document extends the use of specifications based | In Section 1.2, this document extends the use of specifications based | |||
| on the JSON data model with support for YAML fragment identifiers. | on the JSON data model with support for YAML fragment identifiers. | |||
| This is to improve the interoperability of already consolidated | This is to improve the interoperability of already-consolidated | |||
| practices, such as the one of writing OpenAPI documents [OAS] in | practices, such as writing OpenAPI documents [OAS] in YAML. | |||
| YAML. | ||||
| Appendix A provides a non-exhaustive list of examples that could help | Appendix A provides a non-exhaustive list of examples to help readers | |||
| understand interoperability issues related to fragment identifiers. | understand interoperability issues related to fragment identifiers. | |||
| 4. Security Considerations | 4. Security Considerations | |||
| Security requirements for both media type and media type suffix | Security requirements for both media types and media type suffixes | |||
| registrations are discussed in Section 4.6 of [MEDIATYPE]. | are discussed in Section 4.6 of [MEDIATYPE]. | |||
| 4.1. Arbitrary Code Execution | 4.1. Arbitrary Code Execution | |||
| Care should be used when using YAML tags, because their resolution | Care should be used when using YAML tags because their resolution | |||
| might trigger unexpected code execution. | might trigger unexpected code execution. | |||
| Code execution in deserializers should be disabled by default, and | Code execution in deserializers should be disabled by default and | |||
| only be enabled explicitly. In those cases, the implementation | only be enabled explicitly. In the latter case, the implementation | |||
| should ensure - for example, via specific functions - that the code | should ensure (for example, via specific functions) that the code | |||
| execution results in strictly bounded time/memory limits. | execution results in strictly bounded time/memory limits. | |||
| Many implementations provide safe deserializers addressing these | Many implementations provide safe deserializers that address these | |||
| issues. | issues. | |||
| 4.2. Resource Exhaustion | 4.2. Resource Exhaustion | |||
| YAML documents are rooted, connected, directed graphs and can contain | YAML documents are rooted, connected, directed graphs and can contain | |||
| reference cycles, so they can't be treated as simple trees (see | reference cycles, so they can't be treated as simple trees (see | |||
| Section 3.2.1 of [YAML]). An implementation that treats them as | Section 3.2.1 of [YAML]). An implementation that treats them as | |||
| simple trees risks going into an infinite loop while traversing the | simple trees risks going into an infinite loop while traversing the | |||
| YAML representation graph. This can happen: | YAML representation graph. This can happen: | |||
| * when trying to serialize it as JSON; | * when trying to serialize it as JSON or | |||
| * or when searching/identifying nodes using specifications based on | * when searching/identifying nodes using specifications based on the | |||
| the JSON data model (e.g., [JSON-POINTER]). | JSON data model (e.g., [JSON-POINTER]). | |||
| %YAML 1.2 | %YAML 1.2 | |||
| --- | --- | |||
| x: &x | x: &x | |||
| y: *x | y: *x | |||
| Figure 4: A cyclic document | ||||
| Figure 4: A Cyclic Document | ||||
| Even if a representation graph is not cyclic, treating it as a simple | Even if a representation graph is not cyclic, treating it as a simple | |||
| tree could lead to improper behaviors (such as the "billion laughs" | tree could lead to improper behaviors, such as triggering an | |||
| or "Exponential Entity Expansion" problem). | Exponential Data Expansion (e.g., a Billion Laughs Attack). | |||
| %YAML 1.2 | %YAML 1.2 | |||
| --- | --- | |||
| x1: &a1 ["a", "a"] | x1: &a1 ["a", "a"] | |||
| x2: &a2 [*a1, *a1] | x2: &a2 [*a1, *a1] | |||
| x3: &a3 [*a2, *a2] | x3: &a3 [*a2, *a2] | |||
| Figure 5: A billion laughs document | Figure 5: A Billion Laughs Document | |||
| This can be addressed using processors limiting the anchor recursion | This can be addressed using processors that limit the anchor | |||
| depth and validating the input before processing it; even in these | recursion depth and validate the input before processing it; even in | |||
| cases it is important to carefully test the implementation you are | these cases, it is important to carefully test the implementation you | |||
| going to use. The same considerations apply when serializing a YAML | are going to use. The same considerations apply when serializing a | |||
| representation graph in a format that does not support reference | YAML representation graph in a format that does not support reference | |||
| cycles (see Section 3.4). | cycles (see Section 3.4). | |||
| 4.3. YAML streams | 4.3. YAML Streams | |||
| Incremental parsing and processing of a YAML stream can produce | Incremental parsing and processing of a YAML stream can produce | |||
| partial results and later indicate failure to parse the remainder of | partial results and later indicate failure to parse the remainder of | |||
| the stream; to prevent partial processing, implementers might prefer | the stream; to prevent partial processing, implementers might prefer | |||
| validating and processing all the documents in a stream at the same | validating and processing all the documents in a stream at the same | |||
| time. | time. | |||
| Repeated parsing and re-encoding of a YAML stream can result in the | Repeated parsing and re-encoding of a YAML stream can result in the | |||
| addition or removal of document delimiters (e.g., --- or ...) as well | addition or removal of document delimiters (e.g., --- or ...) as well | |||
| as the modification of anchor names and other serialization details, | as the modification of anchor names and other serialization details | |||
| which can break signature validation. | that can break signature validation. | |||
| 4.4. Expressing booleans | 4.4. Expressing Booleans | |||
| Section 10.3.2 of [YAML] specifies that only the scalars matching the | Section 10.3.2 of [YAML] specifies that only the scalars matching the | |||
| regular expression true|True|TRUE|false|False|FALSE are interpreted | regular expression true|True|TRUE|false|False|FALSE are interpreted | |||
| as booleans. Older YAML versions were more tolerant (e.g., | as booleans. Older YAML versions were more tolerant (e.g., | |||
| interpreting NO and N as False, and YES and Y as True). When the | interpreting NO and N as False and interpreting YES and Y as True). | |||
| older syntax is used, a YAML implementation could then interpret | When the older syntax is used, a YAML implementation could then | |||
| {insecure: n} as {insecure: "n"} instead of {insecure: false}. Using | interpret {insecure: n} as {insecure: "n"} instead of {insecure: | |||
| the syntax defined in Section 10.3.2 of [YAML] prevents these issues. | false}. Using the syntax defined in Section 10.3.2 of [YAML] prevents | |||
| these issues. | ||||
| 5. IANA Considerations | 5. IANA Considerations | |||
| This specification defines the following new Internet media type | IANA has updated the "Media Types" registry | |||
| [MEDIATYPE]. | ||||
| IANA is asked to update the "Media Types" registry at | ||||
| https://www.iana.org/assignments/media-types | ||||
| (https://www.iana.org/assignments/media-types) with the registration | (https://www.iana.org/assignments/media-types) with the registration | |||
| information provided in the section below. | information in Section 2.1 for the media type application/yaml. | |||
| +==================+==================================+ | ||||
| | Media Type | Registration information section | | ||||
| +==================+==================================+ | ||||
| | application/yaml | Section 2.1 of this document | | ||||
| +------------------+----------------------------------+ | ||||
| Table 1 | ||||
| IANA is asked to update the "Structured Syntax Suffixes" registry at | IANA has updated the "Structured Syntax Suffixes" registry | |||
| https://www.iana.org/assignments/media-type-structured-suffix | ||||
| (https://www.iana.org/assignments/media-type-structured-suffix) with | (https://www.iana.org/assignments/media-type-structured-suffix) with | |||
| the registration information provided in the section below. | the registration information in Section 2.2 for the structured syntax | |||
| suffix +yaml. | ||||
| +========+==================================+ | ||||
| | Suffix | Registration information section | | ||||
| +========+==================================+ | ||||
| | +yaml | Section 2.2 of this document | | ||||
| +--------+----------------------------------+ | ||||
| Table 2 | ||||
| 6. References | 6. References | |||
| 6.1. Normative References | 6.1. Normative References | |||
| [HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "HTTP Semantics", STD 97, RFC 9110, | Ed., "HTTP Semantics", STD 97, RFC 9110, | |||
| DOI 10.17487/RFC9110, June 2022, | DOI 10.17487/RFC9110, June 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9110>. | <https://www.rfc-editor.org/info/rfc9110>. | |||
| [JSON] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [JSON] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
| Interchange Format", STD 90, RFC 8259, | Interchange Format", STD 90, RFC 8259, | |||
| DOI 10.17487/RFC8259, December 2017, | DOI 10.17487/RFC8259, December 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8259>. | <https://www.rfc-editor.org/info/rfc8259>. | |||
| [JSON-POINTER] | [JSON-POINTER] | |||
| Bryan, P., Ed., Zyp, K., and M. Nottingham, Ed., | Bryan, P., Ed., Zyp, K., and M. Nottingham, Ed., | |||
| "JavaScript Object Notation (JSON) Pointer", RFC 6901, | "JavaScript Object Notation (JSON) Pointer", RFC 6901, | |||
| DOI 10.17487/RFC6901, April 2013, | DOI 10.17487/RFC6901, April 2013, | |||
| <https://www.rfc-editor.org/rfc/rfc6901>. | <https://www.rfc-editor.org/info/rfc6901>. | |||
| [MEDIATYPE] | [MEDIATYPE] | |||
| Freed, N., Klensin, J., and T. Hansen, "Media Type | Freed, N., Klensin, J., and T. Hansen, "Media Type | |||
| Specifications and Registration Procedures", BCP 13, | Specifications and Registration Procedures", BCP 13, | |||
| RFC 6838, DOI 10.17487/RFC6838, January 2013, | RFC 6838, DOI 10.17487/RFC6838, January 2013, | |||
| <https://www.rfc-editor.org/rfc/rfc6838>. | <https://www.rfc-editor.org/info/rfc6838>. | |||
| [OAS] Darrel Miller, Jeremy Whitlock, Marsh Gardiner, Mike | [OAS] Miller, D., Whitlock, J., Gardiner, M., Ralphson, M., | |||
| Ralphson, Ron Ratovsky, and Uri Sarid, "OpenAPI | Ratovsky, R., and U. Sarid, "OpenAPI Specification", | |||
| Specification 3.0.0", 26 July 2017. | v3.0.0, 26 July 2017. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [URI] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [URI] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
| Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| RFC 3986, DOI 10.17487/RFC3986, January 2005, | RFC 3986, DOI 10.17487/RFC3986, January 2005, | |||
| <https://www.rfc-editor.org/rfc/rfc3986>. | <https://www.rfc-editor.org/info/rfc3986>. | |||
| [UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO | [UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO | |||
| 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November | 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November | |||
| 2003, <https://www.rfc-editor.org/rfc/rfc3629>. | 2003, <https://www.rfc-editor.org/info/rfc3629>. | |||
| [YAML] Oren Ben-Kiki, Clark Evans, Ingy dot Net, Tina Müller, | [YAML] Ben-Kiki, O., Evans, C., dot Net, I., Müller, T., | |||
| Pantelis Antoniou, Eemeli Aro, and Thomas Smith, "YAML | Antoniou, P., Aro, E., and T. Smith, "YAML Ain't Markup | |||
| Ain't Markup Language Version 1.2", 1 October 2021, | Language Version 1.2", 1 October 2021, | |||
| <https://yaml.org/spec/1.2.2/>. | <https://yaml.org/spec/1.2.2/>. | |||
| 6.2. Informative References | 6.2. Informative References | |||
| [I-D.ietf-jsonpath-base] | ||||
| Gössner, S., Normington, G., and C. Bormann, "JSONPath: | ||||
| Query expressions for JSON", Work in Progress, Internet- | ||||
| Draft, draft-ietf-jsonpath-base-20, 25 August 2023, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf- | ||||
| jsonpath-base-20>. | ||||
| [RFC7464] Williams, N., "JavaScript Object Notation (JSON) Text | [RFC7464] Williams, N., "JavaScript Object Notation (JSON) Text | |||
| Sequences", RFC 7464, DOI 10.17487/RFC7464, February 2015, | Sequences", RFC 7464, DOI 10.17487/RFC7464, February 2015, | |||
| <https://www.rfc-editor.org/rfc/rfc7464>. | <https://www.rfc-editor.org/info/rfc7464>. | |||
| Appendix A. Examples related to fragment identifier interoperability | Appendix A. Examples Related to Fragment Identifier Interoperability | |||
| A.1. Unreferenceable nodes | ||||
| In this example, a couple of YAML nodes that cannot be referenced | A.1. Unreferenceable Nodes | |||
| This example shows a couple of YAML nodes that cannot be referenced | ||||
| based on the JSON data model since their mapping keys are not | based on the JSON data model since their mapping keys are not | |||
| strings. | strings. | |||
| %YAML 1.2 | %YAML 1.2 | |||
| --- | --- | |||
| a-map-cannot: | a-map-cannot: | |||
| ? {be: expressed} | ? {be: expressed} | |||
| : with a JSON Pointer | : with a JSON Pointer | |||
| 0: no numeric mapping keys in JSON | 0: no numeric mapping keys in JSON | |||
| Figure 6: Example of YAML nodes that are not referenceable based | Figure 6: Example of YAML Nodes That Are Not Referenceable Based | |||
| on JSON data model. | on JSON Data Model | |||
| A.2. Referencing a missing node | A.2. Referencing a Missing Node | |||
| In this example the fragment #/0 does not reference an existing node | In this example, the fragment #/0 does not reference an existing | |||
| node. | ||||
| %YAML 1.2 | %YAML 1.2 | |||
| --- | --- | |||
| 0: "JSON Pointer `#/0` references a string mapping key." | 0: "JSON Pointer `#/0` references a string mapping key." | |||
| Figure 7: Example of a JSON Pointer that does not reference an | Figure 7: Example of a JSON Pointer That Does Not Reference an | |||
| existing node. | Existing Node | |||
| A.3. Representation graph with anchors and cyclic references | A.3. Representation Graph with Anchors and Cyclic References | |||
| In this YAML document, the #/foo/bar/baz fragment identifier | In this YAML document, the #/foo/bar/baz fragment identifier | |||
| traverses the representation graph and references the string you. | traverses the representation graph and references the string you. | |||
| Moreover, the presence of a cyclic reference implies that there are | Moreover, the presence of a cyclic reference implies that there are | |||
| infinite fragment identifiers #/foo/bat/../bat/bar referencing the | infinite fragment identifiers #/foo/bat/../bat/bar referencing the | |||
| &anchor node. | &anchor node. | |||
| %YAML 1.2 | %YAML 1.2 | |||
| --- | --- | |||
| anchor: &anchor | anchor: &anchor | |||
| baz: you | baz: you | |||
| foo: &foo | foo: &foo | |||
| bar: *anchor | bar: *anchor | |||
| bat: *foo | bat: *foo | |||
| Figure 8: Example of a cyclic reference and alias nodes. | Figure 8: Example of a Cyclic Reference and Alias Nodes | |||
| Many YAML implementations will resolve the merge key "<<:" | Many YAML implementations will resolve the merge key "<<:" | |||
| (https://yaml.org/type/merge.html) defined in YAML 1.1 in the | (https://yaml.org/type/merge.html) defined in YAML 1.1 in the | |||
| representation graph. This means that the fragment #/book/author/ | representation graph. This means that the fragment #/book/author/ | |||
| given_name references the string Federico and that the fragment | given_name references the string Federico and that the fragment | |||
| #/book/<< will not reference any existing node. | #/book/<< will not reference any existing node. | |||
| %YAML 1.1 | %YAML 1.1 | |||
| --- | --- | |||
| # Many implementations use merge keys. | # Many implementations use merge keys. | |||
| the-viceroys: &the-viceroys | the-viceroys: &the-viceroys | |||
| title: The Viceroys | title: The Viceroys | |||
| author: | author: | |||
| given_name: Federico | given_name: Federico | |||
| family_name: De Roberto | family_name: De Roberto | |||
| book: | book: | |||
| <<: *the-viceroys | <<: *the-viceroys | |||
| title: The Illusion | title: The Illusion | |||
| Figure 9: Example of YAML merge keys. | Figure 9: Example of YAML Merge Keys | |||
| Acknowledgements | Acknowledgements | |||
| Thanks to Erik Wilde and David Biesack for being the initial | Thanks to Erik Wilde and David Biesack for being the initial | |||
| contributors of this specification, and to Darrel Miller and Rich | contributors to this specification and to Darrel Miller and Rich Salz | |||
| Salz for their support during the adoption phase. | for their support during the adoption phase. | |||
| In addition to the people above, this document owes a lot to the | ||||
| extensive discussion inside and outside the HTTPAPI workgroup. The | ||||
| following contributors have helped improve this specification by | ||||
| opening pull requests, reporting bugs, asking smart questions, | ||||
| drafting or reviewing text, and evaluating open issues: | ||||
| Tina (tinita) Müller, Ben Hutton, Carsten Bormann, Manu Sporny and | ||||
| Jason Desrosiers. | ||||
| FAQ | ||||
| This section is to be removed before publishing as an RFC. | ||||
| Q: Why this document? After all these years, we still lack a proper | ||||
| media-type for YAML. This has some security implications too (eg. | ||||
| wrt on identifying parsers or treat downloads) | ||||
| Q: Why using alias nodes as fragment identifiers? Alias nodes are a | ||||
| native YAML feature that allows addressing any node in a YAML | ||||
| document. Since YAML is not limited to string keywords, not all | ||||
| nodes are addressable using JSON Pointers. Alias nodes are thus | ||||
| the natural choice for fragment identifiers Section 1.2. | ||||
| Q: Why not use plain names for alias nodes? Why not define plain | ||||
| names? Using plain name fragments could have limited the ability of | ||||
| future xxx+yaml media types to define their plain name fragments. | ||||
| Moreover, alias nodes starts with * so we found no reason to strip | ||||
| it when using them in fragments. | ||||
| Preserving * had another positive result: it allows distinguishing | ||||
| a fragment identifier expressed as an alias node from one | ||||
| expressed in other formats. In this document we included JSON | ||||
| Pointer [JSON-POINTER] which is expected to start with /. | ||||
| Moreover, since JSON Path [I-D.ietf-jsonpath-base] expressions | ||||
| start with $, this mechanism can be extended to JSON Path too. | ||||
| Q: Why not just use JSON Pointer as the primary fragment | ||||
| identifier? Fragment identifiers in YAML always reference YAML | ||||
| representation graph nodes. JSON Pointer can only rely on string | ||||
| keywords so it is not able to reference a generic node in the | ||||
| representation graph. | ||||
| Since JSON Pointer is a specification unrelated to YAML, we | ||||
| decided to isolate the impacts of changes in JSON Pointer on YAML | ||||
| fragments: only fragments starting with "/" are "delegated" to an | ||||
| external spec, and if [JSON-POINTER] changes, it will only affect | ||||
| fragments starting with "/". | ||||
| The current behaviour for empty fragments is the same for both | ||||
| JSON Pointer and alias nodes. Incidentally, it's the only | ||||
| sensible behaviour independently of [JSON-POINTER]. | ||||
| Q: Why describe the YAML/JSON so closely? In the context of Web | ||||
| APIs, YAML is widely used as a more compact way to serialize | ||||
| content inteded to be consumed according to the JSON data model. | ||||
| Typical examples are OpenAPI specifications and Kubernetes | ||||
| manifest files, that can be serialized in both formats. The YAML | ||||
| media type registration I-D is a spin-off and a building block for | ||||
| the OpenAPI specification media type registration. The YAML/JSON | ||||
| section aims at clarifying what developers should expect when | ||||
| using YAML instead of JSON, and its content arose from common | ||||
| mistakes and FAQs. | ||||
| Please note that we are not imposing any normative restriction on | ||||
| YAML streams; this is because YAML is defined outside this | ||||
| document. Instead, we only provide Interoperability and Security | ||||
| considerations that, by their nature, are not normative. | ||||
| Q: Do we forbid using non-UTF-8 YAML serialization? No. Since | ||||
| [JSON] recommends UTF-8 in interoperability context we suggest | ||||
| that using UTF-8 is an interoperable behavior. This is aligned | ||||
| with Section 5.2 of [YAML] that explicitly recommends UTF-8. | ||||
| Q: Why media type registration information is outside the IANA | ||||
| Considerations? We decided to follow the style adopted in [HTTP] | ||||
| where the IANA Considerations in Section 18.8 of [HTTP] references | ||||
| the multipart/byteranges media type registration form contained in | ||||
| the specification body Section 14.6 of [HTTP]. | ||||
| Change Log | ||||
| This section is to be removed before publishing as an RFC. | ||||
| Since draft-ietf-httpapi-yaml-mediatypes-02 | ||||
| * clarification on fragment identifiers #50. | ||||
| Since draft-ietf-httpapi-yaml-mediatypes-01 | ||||
| * application/yaml fragment identifiers compatible with JSON Pointer | In addition, this document owes a lot to the extensive discussion | |||
| #41 (#47). | inside and outside the HTTPAPI Working Group. The following | |||
| contributors helped improve this specification by opening pull | ||||
| requests, reporting bugs, asking smart questions, drafting or | ||||
| reviewing text, and evaluating open issues: Tina (tinita) Müller, Ben | ||||
| Hutton, Carsten Bormann, Manu Sporny, and Jason Desrosiers. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Roberto Polli | Roberto Polli | |||
| Digital Transformation Department, Italian Government | Digital Transformation Department, Italian Government | |||
| Italy | Italy | |||
| Email: robipolli@gmail.com | Email: robipolli@gmail.com | |||
| Erik Wilde | Erik Wilde | |||
| Axway | Axway | |||
| End of changes. 106 change blocks. | ||||
| 362 lines changed or deleted | 224 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||