Skip to content

Commit 814e0d5

Browse files
committed
Limit interoperable parsing expectations
As discovered through the OASComply project, certain referencing scenarios are ambiguous, with different authorities holding contradictory interpretations regarding whether and how they are to be supported. As a result, it is impossible to define compliance, as all of the interpretations can be argued to be "correct" in some sense. This change excludes some particularly challenging scenarios from compliance testing by making their behavior explicitly implementation-defined. This has several benefits: * No current implementation is rendered non-compliant * No currently usable OAD is rendered invalid * New implementers need not put effort into handling these scenarios * User expectations are set to _not_ expect consistent behavior * Linters can write a rule to match these expectations * Everyone is guided towards straightforwad best practices
1 parent 84815b5 commit 814e0d5

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

versions/3.1.1.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,20 @@ In order to preserve the ability to round-trip between YAML and JSON formats, YA
136136

137137
### <a name="documentStructure"></a>OpenAPI Description Structure
138138

139-
An OpenAPI Description MAY be made up of a single document or be divided into multiple, connected parts at the discretion of the author. In the latter case, [`Reference Objects`](#referenceObject) and [`Schema Object`](#schemaObject) `$ref` keywords are used. In a multi-document description, the document containing the [OpenAPI Object](#oasObject) is known as the **entry OpenAPI document.**
139+
An OpenAPI Description (OAD) MAY be made up of a single document or be divided into multiple, connected parts at the discretion of the author. In the latter case, [Reference Object](#referenceObject), [Path Item Object](#pathItemObject) and [Schema Object](#schemaObject) `$ref` keywords, as well as the [Link Object](#linkObject) `operationRef` keyword, are used. In a multi-document description, the document containing the [OpenAPI Object](#oasObject) is known as the **entry OpenAPI document.**
140140

141141
It is RECOMMENDED that the entry OpenAPI document be named: `openapi.json` or `openapi.yaml`.
142142

143+
### <a name="structuralInteroperability"></a>Structural Interoperability
144+
145+
When parsing an OAD, JSON or YAML objects are parsed into specific Objects (such as [Operation Objects](#operationObject), [Response Objects](#responseObject), [Reference Objects](#referenceObject), etc.) based on the parsing context. Depending on how references are arranged, a given JSON or YAML object can be parsed in multiple different contexts:
146+
147+
* As a full OpenAPI Description document (an [OpenAPI Object](#oasObject) taking up an entire document)
148+
* As the Object type implied by its parent Object within the document
149+
* As a reference target, with the Object type matching the reference source's context
150+
151+
If the same JSON/YAML object is parsed multiple times contexts requiring it to be parsed as _different_ Object types, the resulting behavior is _implementation defined_, and MAY be treated as an error if detected. For maximum interoperability, it is RECOMMENDED that OpenAPI Description authors avoid such scenarios.
152+
143153
### <a name="dataTypes"></a>Data Types
144154

145155
Data types in the OAS are based on the types supported by the [JSON Schema Specification Draft 2020-12](https://tools.ietf.org/html/draft-bhutton-json-schema-00#section-4.2.1).

0 commit comments

Comments
 (0)