Skip to content

Commit

Permalink
Minor param serialization and wording fixes
Browse files Browse the repository at this point in the history
* Directly address `style` delimiters in parameter values
  by explaining that we don't define how to handle them.
* Explicitly set `explode: false` in an example as the default
  with `style: form` is `explode: true`; the `explode: true`
  example was also left explicit to reduce confusion.
* Tidy up overly conversational (e.g. "our document") language
  that I'd meant to revisit but forgot about.
* Include the Header Object as one of the places where the
  `style` keyword is used (even if it is the simplest case)
* Fix a missing space before an RFC reference.
  • Loading branch information
handrews committed Sep 11, 2024
1 parent d1ba364 commit 96ebfa8
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions versions/3.0.4.md
Original file line number Diff line number Diff line change
Expand Up @@ -1127,6 +1127,10 @@ In order to support common ways of serializing simple parameters, a set of `styl

See [Appendix E](#appendix-e-percent-encoding-and-form-media-types) for a discussion of percent-encoding, including when delimiters need to be percent-encoded and options for handling collisions with percent-encoded data.

Note that parameter data can contain characters used as delimiters by certain `style` and `explode` configurations.
For example, when using `style: "simple"`, the arrays `["monospace", "serif", "Arial,Helvetica,sans-serif"]` and `["monospace", "serif", "Arial", "Helvetica", "sans-serif"]` would both be encoded as `"monospace,serif,Arial,Helvetica,sans-serif"`.
API providers SHOULD document how users are expected to handle such values, as the OpenAPI Specification does not address this sort of scenario.

##### Style Examples

Assume a parameter named `color` has one of the following values:
Expand Down Expand Up @@ -3789,7 +3793,7 @@ security:

See [Resolving Implicit Connections](#resolving-implicit-connections) for more information.

First, our [entry document](#openapi-description-structure) is where parsing begins. It defines the `MySecurity` security scheme to be JWT-based, and it defines a Path Item as a reference to a component in another document:
First, the [entry document](#openapi-description-structure) is where parsing begins. It defines the `MySecurity` security scheme to be JWT-based, and it defines a Path Item as a reference to a component in another document:

```HTTP
GET /api/description/openapi HTTP/1.1
Expand Down Expand Up @@ -3832,7 +3836,7 @@ paths:
$ref: 'other#/components/pathItems/Foo'
```

Next, we have our referenced document, `other`. The fact that we don't use file extensions gives the client the flexibility to choose an acceptable format on a resource-by-resource basis, assuming both representations are available:
This entry document references another document, `other`, without using a file extension. This gives the client the flexibility to choose an acceptable format on a resource-by-resource basis, assuming both representations are available:

```HTTP
GET /api/description/other HTTP/1.1
Expand Down Expand Up @@ -3985,11 +3989,12 @@ Requiring input as pre-formatted, schema-validated strings also improves round-t

## Appendix C: Using RFC6570 Implementations

Serialization is defined in terms of [RFC6570](https://www.rfc-editor.org/rfc/rfc6570) URI Templates in two scenarios:
Serialization is defined in terms of [RFC6570](https://www.rfc-editor.org/rfc/rfc6570) URI Templates in three scenarios:

| Object | Condition |
| ---- | ---- |
| [Parameter Object](#parameter-object) | When `schema` is present |
| [Header Object](#header-object) | When `schema` is present |
| [Encoding Object](#encoding-object) | When encoding for `application/x-www-form-urlencoded` and any of `style`, `explode`, or `allowReserved` are used |

Implementations of this specification MAY use an implementation of RFC6570 to perform variable expansion, however, some caveats apply.
Expand Down Expand Up @@ -4032,7 +4037,7 @@ parameters:
This example is equivalent to RFC6570's `{?foo*,bar}`, and **_NOT_** `{?foo*}{&bar}`. The latter is problematic because if `foo` is not defined, the result will be an invalid URI.
The `&` prefix operator has no equivalent in the Parameter Object.

Note that RFC6570 does not specify behavior for compound values beyond the single level addressed by `explode`. The results of using objects or arrays where no behavior is clearly specified for them is implementation-defined.
Note that RFC6570 does not specify behavior for compound values beyond the single level addressed by `explode`. The result of using objects or arrays where no behavior is clearly specified for them is implementation-defined.

### Non-RFC6570 Field Values and Combinations

Expand Down Expand Up @@ -4114,6 +4119,7 @@ parameters:
- name: words
in: query
style: spaceDelimited
explode: false
schema:
type: array
items:
Expand Down Expand Up @@ -4321,7 +4327,7 @@ However, care must be taken to use `form-urlencoded` decoding if `+` represents

### Percent-Encoding and Illegal or Reserved Delimiters

The `[`, `]`, `|`, and space characters, which are used as delimiters for the `deepObject`, `pipeDelimited`, and `spaceDelimited` styles, respectively, all MUST be percent-encoded to comply with[[RFC3986]].
The `[`, `]`, `|`, and space characters, which are used as delimiters for the `deepObject`, `pipeDelimited`, and `spaceDelimited` styles, respectively, all MUST be percent-encoded to comply with [[RFC3986]].
This requires users to pre-encode the character(s) in some other way in parameter names and values to distinguish them from the delimiter usage when using one of these styles.

The space character is always illegal and encoded in some way by all implementations of all versions of the relevant standards.
Expand Down

0 comments on commit 96ebfa8

Please sign in to comment.