Skip to content

Conversation

@karenetheridge
Copy link
Member

@karenetheridge karenetheridge commented Feb 6, 2026

Backport of #5122 from v3.3-dev and #5196 from from v3.2-dev, adjusted with the following changes for 3.1:

  • allowReserved is only permitted in query parameters and the encoding object (not also in in: path and in: cookie, style: form).
  • removed any references to in: querystring and style: cookie

Various fixes and wording clarifications to the sections discussing parameters.

  • schema changes are included in this pull request

@karenetheridge karenetheridge requested review from a team as code owners February 6, 2026 20:48
@karenetheridge karenetheridge force-pushed the ether/3.1-parameter-styles-more branch from 0bfe8b3 to b6aad67 Compare February 6, 2026 21:12
…ts with in:query

(this was changed in 3.2.0 to allow it wherever percent-encoding is done)
… objects

- explode defaults were wrong for encoding object
- allowReserved defaults were wrong for encoding object

in parameter objects:
- explode: always false for "in: path", "in: header"
- explode: always true for "in: cookie" ("style: form" is the only option, and
  defaults to "explode: true")
- explode: only true for "in: query" when "style: form" (the default style for
  this location)

in encoding objects:
- style: default is "form", but only when "explode" or "allowReserved" are present
- explode: default is true when "style: form" (the default style) and otherwise
  false, and not included at all unless "style" or "allowReserved" are present
- allowReserved: default is false, but only when "style" or "explode" are present

that is: when none of style, explode or allowReserved are present, "contentType"
is used (or a default is calculated), so none of style, explode or allowReserved
shall have default values
…ll defaults omitted

tested with:

$ openapi-validate --with-defaults tests/schema/pass/style-defaults.yaml
{
  "defaults" : {
    "/components/parameters/cookie_form/deprecated" : false,
    "/components/parameters/cookie_form/explode" : true,
    "/components/parameters/cookie_form/required" : false,
    "/components/parameters/cookie_form/style" : "form",
    "/components/parameters/cookie_media_type/deprecated" : false,
    "/components/parameters/cookie_media_type/required" : false,
    "/components/parameters/encoding_object_defaults/content/encoding_object_defaults/encoding/allowReserved/explode" : true,
    "/components/parameters/encoding_object_defaults/content/encoding_object_defaults/encoding/allowReserved/style" : "form",
    "/components/parameters/encoding_object_defaults/content/encoding_object_defaults/encoding/explode/allowReserved" : false,
    "/components/parameters/encoding_object_defaults/content/encoding_object_defaults/encoding/explode/style" : "form",
    "/components/parameters/encoding_object_defaults/content/encoding_object_defaults/encoding/style_form/allowReserved" : false,
    "/components/parameters/encoding_object_defaults/content/encoding_object_defaults/encoding/style_form/explode" : true,
    "/components/parameters/encoding_object_defaults/content/encoding_object_defaults/encoding/style_spaceDelimited/allowReserved" : false,
    "/components/parameters/encoding_object_defaults/content/encoding_object_defaults/encoding/style_spaceDelimited/explode" : false,
    "/components/parameters/encoding_object_defaults/deprecated" : false,
    "/components/parameters/encoding_object_defaults/required" : false,
    "/components/parameters/header/deprecated" : false,
    "/components/parameters/header/explode" : false,
    "/components/parameters/header/style" : "simple",
    "/components/parameters/path_label/deprecated" : false,
    "/components/parameters/path_label/explode" : false,
    "/components/parameters/path_matrix/deprecated" : false,
    "/components/parameters/path_matrix/explode" : false,
    "/components/parameters/path_media_type/deprecated" : false,
    "/components/parameters/path_simple/deprecated" : false,
    "/components/parameters/path_simple/explode" : false,
    "/components/parameters/path_simple/style" : "simple",
    "/components/parameters/query_deepObject/allowEmptyValue" : false,
    "/components/parameters/query_deepObject/allowReserved" : false,
    "/components/parameters/query_deepObject/deprecated" : false,
    "/components/parameters/query_deepObject/explode" : false,
    "/components/parameters/query_deepObject/required" : false,
    "/components/parameters/query_form/allowEmptyValue" : false,
    "/components/parameters/query_form/allowReserved" : false,
    "/components/parameters/query_form/deprecated" : false,
    "/components/parameters/query_form/explode" : true,
    "/components/parameters/query_form/required" : false,
    "/components/parameters/query_form/style" : "form",
    "/components/parameters/query_media_type/allowEmptyValue" : false,
    "/components/parameters/query_media_type/deprecated" : false,
    "/components/parameters/query_media_type/required" : false,
    "/components/parameters/query_pipeDelimited/allowEmptyValue" : false,
    "/components/parameters/query_pipeDelimited/allowReserved" : false,
    "/components/parameters/query_pipeDelimited/deprecated" : false,
    "/components/parameters/query_pipeDelimited/explode" : false,
    "/components/parameters/query_pipeDelimited/required" : false,
    "/components/parameters/query_spaceDelimited/allowEmptyValue" : false,
    "/components/parameters/query_spaceDelimited/allowReserved" : false,
    "/components/parameters/query_spaceDelimited/deprecated" : false,
    "/components/parameters/query_spaceDelimited/explode" : false,
    "/components/parameters/query_spaceDelimited/required" : false,
    "/jsonSchemaDialect" : "https://spec.openapis.org/oas/3.1/dialect/WORK-IN-PROGRESS",
    "/servers" : [
      {
        "url" : "/"
      }
    ]
  },
  "valid" : true
}

(executable is part of https://github.com/karenetheridge/OpenAPI-Modern)
For the Appendix C.4 example, "words" is said to not explode its values.
..and remove example that is specific to a particular style, explode and
schema type configuration
@karenetheridge karenetheridge force-pushed the ether/3.1-parameter-styles-more branch from b6aad67 to e890239 Compare February 6, 2026 21:19
Copy link
Contributor

@lornajane lornajane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@lornajane lornajane merged commit b9b1028 into OAI:v3.1-dev Feb 8, 2026
2 checks passed
@karenetheridge karenetheridge deleted the ether/3.1-parameter-styles-more branch February 8, 2026 17:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants