Skip to content

Commit fb8af87

Browse files
authored
Merge pull request #4800 from handrews/style-examples-3
v3.2: Explain Param and Header example serialization
2 parents 2940af6 + af2a5a8 commit fb8af87

File tree

1 file changed

+27
-9
lines changed

1 file changed

+27
-9
lines changed

src/oas.md

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,23 +1033,41 @@ In order to support common ways of serializing simple parameters, a set of `styl
10331033

10341034
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.
10351035

1036+
##### Serialization and Examples
1037+
1038+
The rules in this section apply to both the Parameter and [Header](#header-object) Objects, both of which use the same mechanisms.
1039+
1040+
When showing serialized examples, such as with the [Example Object's](#example-object) `serializedValue` or `externalValue` fields, in most cases the value to show is just the value, with all relevant percent-encoding or other encoding/escaping applied, and also including any delimiters produced by the `style` and `explode` configuration.
1041+
1042+
In cases where the name is an inherent part of constructing the serialization, such as the `name=value` pairs produced by `style: "form"` or the combination of `style: "simple", explode: true`, the name and any delimiter between the name and value MUST be included.
1043+
1044+
The `matrix` and `label` styles produce a leading delimiter which is always a valid part of the serialization and MUST be included.
1045+
The RFC6570 operators corresponding to `style: "form"` produce a leading delimiter of either `?` or `&` depending on the exact syntax used.
1046+
As the suitability of either delimiter depends on where in the query string the parameter occurs, as well as whether it is in a URI or in `application/x-www-form-urlencoded` content, this leading delimiter MUST NOT be included in examples of individual parameters or media type documents.
1047+
For `in: "cookie", style: "form"`, neither the `&` nor `?` delimiters are ever correct; see [Appendix D: Serializing Headers and Cookies](#appendix-d-serializing-headers-and-cookies) for more details.
1048+
1049+
For headers, the header name MUST NOT be included as part of the serialization, as it is never part of the RFC6570-derived result.
1050+
However, names produced by `style: "simple", explode: "true"` are included as they appear within the header value, not as separate headers.
1051+
See the [Header Object](#header-object) for special rules for showing examples of the `Set-Cookie` response header, which violates the normal rules for multiple header values.
1052+
1053+
The following section illustrates these rules.
1054+
10361055
##### Style Examples
10371056

1038-
Assume a parameter named `color` has one of the following values:
1057+
Assume a parameter named `color` has one of the following values, where the value to the right of the `->` is what would be shown in the `dataValue` field of an Example Object:
10391058

10401059
```js
10411060
string -> "blue"
10421061
array -> ["blue", "black", "brown"]
10431062
object -> { "R": 100, "G": 200, "B": 150 }
10441063
```
10451064

1046-
The following table shows examples, as would be shown with the `example` or `examples` keywords, of the different serializations for each value.
1065+
The following table shows serialized examples, as would be shown with the `serializedValue` field of an Example Object, of the different serializations for each value.
10471066

10481067
* The value _empty_ denotes the empty string, and is unrelated to the `allowEmptyValue` field
10491068
* The behavior of combinations marked _n/a_ is undefined
10501069
* The `undefined` column replaces the `empty` column in previous versions of this specification in order to better align with [RFC6570](https://www.rfc-editor.org/rfc/rfc6570.html#section-2.3) terminology, which describes certain values including but not limited to `null` as "undefined" values with special handling; notably, the empty string is _not_ undefined
1051-
* For `form` and the non-RFC6570 query string styles `spaceDelimited`, `pipeDelimited`, and `deepObject`, each example is shown prefixed with `?` as if it were the only query parameter; see [Appendix C](#appendix-c-using-rfc6570-based-serialization) for more information on constructing query strings from multiple parameters, and [Appendix D](#appendix-d-serializing-headers-and-cookies) for warnings regarding `form` and cookie parameters
1052-
* Note that the `?` prefix is not appropriate for serializing `application/x-www-form-urlencoded` HTTP message bodies, and MUST be stripped or (if constructing the string manually) not added when used in that context; see the [Encoding Object](#encoding-object) for more information
1070+
* For `form` and the non-RFC6570 query string styles `spaceDelimited`, `pipeDelimited`, and `deepObject`, see [Appendix C](#appendix-c-using-rfc6570-based-serialization) for more information on constructing query strings from multiple parameters, and [Appendix D](#appendix-d-serializing-headers-and-cookies) for warnings regarding `form` and cookie parameters
10531071
* The examples are percent-encoded as required by RFC6570 and RFC3986; see [Appendix E](#appendix-e-percent-encoding-and-form-media-types) for a thorough discussion of percent-encoding concerns, including why unencoded `|` (`%7C`), `[` (`%5B`), and `]` (`%5D`) seem to work in some environments despite not being compliant.
10541072

10551073
| [`style`](#style-values) | `explode` | `undefined` | `string` | `array` | `object` |
@@ -1060,14 +1078,14 @@ The following table shows examples, as would be shown with the `example` or `exa
10601078
| label | true | . | .blue | .blue.black.brown | .R=100.G=200.B=150 |
10611079
| simple | false | _empty_ | blue | blue,black,brown | R,100,G,200,B,150 |
10621080
| simple | true | _empty_ | blue | blue,black,brown | R=100,G=200,B=150 |
1063-
| form | false | <span style="white-space: nowrap;">?color=</span> | <span style="white-space: nowrap;">?color=blue</span> | <span style="white-space: nowrap;">?color=blue,black,brown</span> | <span style="white-space: nowrap;">?color=R,100,G,200,B,150</span> |
1064-
| form | true | <span style="white-space: nowrap;">?color=</span> | <span style="white-space: nowrap;">?color=blue</span> | <span style="white-space: nowrap;">?color=blue&color=black&color=brown</span> | <span style="white-space: nowrap;">?R=100&G=200&B=150</span> |
1065-
| spaceDelimited</span> | false | _n/a_ | _n/a_ | <span style="white-space: nowrap;">?color=blue%20black%20brown</span> | <span style="white-space: nowrap;">?color=R%20100%20G%20200%20B%20150</span> |
1081+
| form | false | <span style="white-space: nowrap;">color=</span> | <span style="white-space: nowrap;">color=blue</span> | <span style="white-space: nowrap;">color=blue,black,brown</span> | <span style="white-space: nowrap;">color=R,100,G,200,B,150</span> |
1082+
| form | true | <span style="white-space: nowrap;">color=</span> | <span style="white-space: nowrap;">color=blue</span> | <span style="white-space: nowrap;">color=blue&color=black&color=brown</span> | <span style="white-space: nowrap;">R=100&G=200&B=150</span> |
1083+
| spaceDelimited</span> | false | _n/a_ | _n/a_ | <span style="white-space: nowrap;">color=blue%20black%20brown</span> | <span style="white-space: nowrap;">color=R%20100%20G%20200%20B%20150</span> |
10661084
| spaceDelimited | true | _n/a_ | _n/a_ | _n/a_ | _n/a_ |
1067-
| pipeDelimited | false | _n/a_ | _n/a_ | <span style="white-space: nowrap;">?color=blue%7Cblack%7Cbrown</span> | <span style="white-space: nowrap;">?color=R%7C100%7CG%7C200%7CB%7C150</span> |
1085+
| pipeDelimited | false | _n/a_ | _n/a_ | <span style="white-space: nowrap;">color=blue%7Cblack%7Cbrown</span> | <span style="white-space: nowrap;">color=R%7C100%7CG%7C200%7CB%7C150</span> |
10681086
| pipeDelimited | true | _n/a_ | _n/a_ | _n/a_ | _n/a_ |
10691087
| deepObject | false | _n/a_ | _n/a_ | _n/a_ | _n/a_ |
1070-
| deepObject | true | _n/a_ | _n/a_ | _n/a_ | <span style="white-space: nowrap;">?color%5BR%5D=100&color%5BG%5D=200&color%5BB%5D=150</span> |
1088+
| deepObject | true | _n/a_ | _n/a_ | _n/a_ | <span style="white-space: nowrap;">color%5BR%5D=100&color%5BG%5D=200&color%5BB%5D=150</span> |
10711089

10721090
##### Extending Support for Querystring Formats
10731091

0 commit comments

Comments
 (0)