Skip to content

Instantly share code, notes, and snippets.

@xeptore
Last active January 18, 2024 04:40
Show Gist options
  • Save xeptore/87f3b80f5c13e9d2c5b620c338c2c43e to your computer and use it in GitHub Desktop.
Save xeptore/87f3b80f5c13e9d2c5b620c338c2c43e to your computer and use it in GitHub Desktop.
The description of OpenAPI v3.1.x operation documents without schema validation, as defined by https://spec.openapis.org/oas/v3.1.0
$id: https://gist.githubusercontent.com/xeptore/87f3b80f5c13e9d2c5b620c338c2c43e/raw/openapi-v3.1-operation-object-schema.yaml
$schema: https://json-schema.org/draft/2020-12/schema
title: OpenAPI v3.1.x Operation Object Schema
$comment: https://spec.openapis.org/oas/v3.1.0#operation-object
type: object
additionalProperties: false
unevaluatedProperties: false
required:
- tags
- summary
- operationId
- responses
properties:
tags:
type: array
uniqueItems: true
items:
type: string
summary:
type: string
description:
type: string
operationId:
type: string
pattern: "^[a-z]+(-[a-z]+)*$"
parameters:
type: array
items:
$ref: "#/$defs/parameter-or-reference"
requestBody:
$ref: "#/$defs/request-body"
responses:
$ref: "#/$defs/responses"
deprecated:
type: boolean
default: false
security:
type: array
items:
$ref: "#/$defs/security-requirement"
servers:
type: array
items:
$ref: "#/$defs/server"
$defs:
server:
$comment: https://spec.openapis.org/oas/v3.1.0#server-object
type: object
unevaluatedProperties: false
properties:
url:
type: string
format: uri-reference
description:
type: string
variables:
type: object
unevaluatedProperties: false
patternProperties:
"^[a-z]+([A-Z][a-z]+)*$":
$ref: "#/$defs/server-variable"
required:
- url
server-variable:
$comment: https://spec.openapis.org/oas/v3.1.0#server-variable-object
type: object
unevaluatedProperties: false
properties:
enum:
type: array
uniqueItems: true
items:
type: string
default:
type: string
description:
type: string
required:
- default
parameter:
$comment: https://spec.openapis.org/oas/v3.1.0#parameter-object
type: object
unevaluatedProperties: false
required:
- name
- in
properties:
name:
type: string
minLength: 1
in:
enum:
- query
- header
- path
- cookie
description:
type: string
required:
type: boolean
default: false
deprecated:
type: boolean
default: false
schema:
$ref: "#/$defs/schema"
examples:
$ref: "#/$defs/schema-examples"
content:
$ref: "#/$defs/content"
oneOf:
- required:
- schema
- examples
- required:
- content
if:
properties:
in:
const: query
required:
- in
then:
properties:
allowEmptyValue:
default: false
type: boolean
dependentSchemas:
schema:
properties:
style:
type: string
explode:
type: boolean
allOf:
- $ref: "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-path"
- $ref: "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-header"
- $ref: "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-query"
- $ref: "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-cookie"
- $ref: "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-form"
$defs:
styles-for-path:
if:
type: object
properties:
in:
const: path
required:
- in
then:
type: object
properties:
name:
type: string
pattern: "^[a-z]+([A-Z][a-z]+)*$"
style:
default: simple
enum:
- matrix
- label
- simple
required:
const: true
required:
- required
styles-for-header:
if:
type: object
properties:
in:
const: header
required:
- in
then:
type: object
properties:
name:
type: string
pattern: ^[a-z]+(-[a-z]+)*$
style:
default: simple
const: simple
styles-for-query:
if:
type: object
properties:
in:
const: query
required:
- in
then:
type: object
properties:
name:
type: string
pattern: "^[a-z]+(_[a-z]+)*$"
style:
default: form
enum:
- form
- spaceDelimited
- pipeDelimited
- deepObject
allowReserved:
default: false
type: boolean
styles-for-cookie:
if:
type: object
properties:
in:
const: cookie
required:
- in
then:
type: object
properties:
name:
type: string
pattern: "^[a-z]+(-[a-z]+)*$"
style:
default: form
const: form
styles-for-form:
if:
type: object
properties:
style:
const: form
required:
- style
then:
type: object
properties:
name:
type: string
pattern: "^[a-z]+(_[a-z]+)*$"
explode:
default: true
else:
type: object
properties:
explode:
default: false
parameter-or-reference:
if:
type: object
required:
- $ref
then:
$ref: "#/$defs/reference"
else:
$ref: "#/$defs/parameter"
content:
$comment: https://spec.openapis.org/oas/v3.1.0#fixed-fields-10
type: object
unevaluatedProperties: false
minProperties: 1
maxProperties: 1
oneOf:
- required:
- "application/json"
properties:
"application/json":
$ref: "#/$defs/content-schema"
content-schema:
type: object
unevaluatedProperties: false
required:
- schema
- examples
properties:
encoding:
$ref: "#/$defs/encoding"
schema:
type: object
required:
- type
- properties
- unevaluatedProperties
properties:
type:
type: string
const: object
unevaluatedProperties:
type: boolean
default: false
properties:
$ref: "#/$defs/properties"
examples:
$ref: "#/$defs/schema-examples"
schema-examples:
type: object
unevaluatedProperties: false
minProperties: 1
patternProperties:
"^[A-Z][a-z]+([a-zA-Z]+)*$":
type: object
unevaluatedProperties: false
required:
- summary
- value
properties:
summary:
type: string
description:
type: string
value: true
encoding:
$comment: https://spec.openapis.org/oas/v3.1.0#encoding-object
type: object
unevaluatedProperties: false
properties:
contentType:
type: string
# format: media-range
headers:
type: object
unevaluatedProperties: false
patternProperties:
"^[A-Z][a-z]+(-[A-Z][a-z]+)*$":
$ref: "#/$defs/header-or-reference"
style:
default: form
enum:
- form
- spaceDelimited
- pipeDelimited
- deepObject
explode:
type: boolean
allowReserved:
default: false
type: boolean
allOf:
- $ref: "#/$defs/encoding/$defs/explode-default"
$defs:
explode-default:
if:
type: object
properties:
style:
const: form
required:
- style
then:
type: object
properties:
explode:
default: true
else:
type: object
properties:
explode:
default: false
request-body:
type: object
unevaluatedProperties: false
required:
- content
properties:
description:
type: string
content:
$ref: "#/$defs/content"
responses:
$comment: https://spec.openapis.org/oas/v3.1.0#responses-object
type: object
unevaluatedProperties: false
patternProperties:
"^[1-5](?:[0-9]{2}|XX)$":
$ref: "#/$defs/response-or-reference"
minProperties: 1
if:
$comment: either default, or at least one response code property must exist
patternProperties:
"^[1-5](?:[0-9]{2}|XX)$": false
then:
required:
- default
response:
$comment: https://spec.openapis.org/oas/v3.1.0#response-object
type: object
unevaluatedProperties: false
required:
- description
properties:
description:
type: string
headers:
type: object
unevaluatedProperties: false
patternProperties:
"^[a-z]+(-[a-z]+)*$":
$ref: "#/$defs/header-or-reference"
content:
$ref: "#/$defs/content"
links:
type: object
unevaluatedProperties: false
patternProperties:
"^[a-z]+([A-Z][a-z]+)*$":
$ref: "#/$defs/link-or-reference"
response-or-reference:
if:
type: object
required:
- $ref
then:
$ref: "#/$defs/reference"
else:
$ref: "#/$defs/response"
link:
$comment: https://spec.openapis.org/oas/v3.1.0#link-object
type: object
unevaluatedProperties: false
properties:
operationRef:
type: string
format: uri-reference
operationId:
type: string
parameters:
$ref: "#/$defs/map-of-strings"
requestBody: true
description:
type: string
body:
$ref: "#/$defs/server"
oneOf:
- required:
- operationRef
- required:
- operationId
link-or-reference:
if:
type: object
required:
- $ref
then:
$ref: "#/$defs/reference"
else:
$ref: "#/$defs/link"
header:
$comment: https://spec.openapis.org/oas/v3.1.0#header-object
type: object
properties:
description:
type: string
required:
default: false
type: boolean
deprecated:
default: false
type: boolean
schema:
$ref: "#/$defs/schema"
examples:
$ref: "#/$defs/schema-examples"
content:
$ref: "#/$defs/content"
oneOf:
- required:
- schema
- examples
- required:
- content
dependentSchemas:
schema:
properties:
style:
default: simple
const: simple
explode:
default: false
type: boolean
unevaluatedProperties: false
header-or-reference:
if:
type: object
required:
- $ref
then:
$ref: "#/$defs/reference"
else:
$ref: "#/$defs/header"
reference:
$comment: https://spec.openapis.org/oas/v3.1.0#reference-object
type: object
properties:
$ref:
type: string
format: uri-reference
summary:
type: string
description:
type: string
unevaluatedProperties: false
security-requirement:
$comment: https://spec.openapis.org/oas/v3.1.0#security-requirement-object
type: object
unevaluatedProperties: false
additionalProperties:
type: array
items:
type: string
map-of-strings:
type: object
unevaluatedProperties: false
additionalProperties:
type: string
properties:
type: object
unevaluatedProperties: false
minProperties: 1
patternProperties:
"^[a-z]+([A-Z][a-z]+)*$":
$ref: "#/$defs/schema"
schema:
oneOf:
- $ref: "#/$defs/schema-of-non-array"
- $ref: "#/$defs/schema-of-array"
schema-of-non-array:
type: object
unevaluatedProperties: false
required:
- type
properties:
type:
type: string
enum:
- string
- number
- integer
- object
- boolean
allOf:
- type: object
properties:
title:
type: string
description:
type: string
nullable:
type: boolean
default: false
- oneOf:
- $ref: "#/$defs/schema-of-string"
- $ref: "#/$defs/schema-of-number"
- $ref: "#/$defs/schema-of-integer"
- $ref: "#/$defs/schema-of-object"
- $ref: "#/$defs/schema-of-boolean"
schema-of-string:
oneOf:
- title: String Form
type: object
unevaluatedProperties: false
required:
- type
properties:
title:
type: string
description:
type: string
nullable:
type: boolean
default: false
type:
const: string
minLength:
type: integer
maxLength:
type: integer
pattern:
type: string
format: regex
format:
type: string
enum:
- password
- zip-code
- uuid
- uri
- uri-reference
- iri
- iri-reference
- regexp
- uri-template
- email
- idn-email
- hostname
- idn-hostname
- ipv4
- ipv6
- date-time
- date
- time
- duration
- title: Enum Form
type: object
unevaluatedProperties: false
required:
- type
- enum
properties:
title:
type: string
description:
type: string
nullable:
type: boolean
default: false
type:
const: string
const:
type: string
enum:
type: array
items:
type: string
uniqueItems: true
- title: Const Form
type: object
unevaluatedProperties: false
required:
- type
- const
properties:
title:
type: string
description:
type: string
nullable:
type: boolean
default: false
type:
const: string
const:
type: string
schema-of-number:
oneOf:
- title: Number Form
type: object
required:
- type
- minimum
- maximum
properties:
type:
const: number
multipleOf:
type: integer
minimum:
type: integer
maximum:
type: integer
default:
type: integer
format:
type: string
enum:
- float
- double
- title: Enum Form
type: object
required:
- type
- enum
properties:
type:
const: number
enum:
type: array
uniqueItems: true
items:
type: number
schema-of-integer:
oneOf:
- title: Integer Form
type: object
required:
- type
- minimum
- maximum
properties:
type:
const: integer
multipleOf:
type: integer
minimum:
type: integer
maximum:
type: integer
default:
type: integer
format:
type: string
enum:
- int32
- int64
- title: Enum Form
type: object
required:
- type
- enum
properties:
type:
const: integer
enum:
type: array
uniqueItems: true
items:
type: integer
schema-of-object:
oneOf:
- title: Object Form
type: object
required:
- type
- properties
- unevaluatedProperties
properties:
type:
const: object
properties:
$ref: "#/$defs/properties"
required:
type: array
uniqueItems: true
items:
type: string
minLength: 1
unevaluatedProperties:
type: boolean
default: false
- title: Enum Form
type: object
required:
- type
- enum
properties:
type:
const: object
enum:
type: array
uniqueItems: true
items:
type: object
minProperties: 1
propertyNames:
pattern: "^[a-z]+([A-Z][a-z]+)*$"
schema-of-array:
type: object
required:
- type
- items
- uniqueItems
- minItems
- maxItems
properties:
type:
const: array
items:
$ref: "#/$defs/schema-of-non-array"
uniqueItems:
type: boolean
const: true
minItems:
type: integer
maxItems:
type: integer
schema-of-boolean:
type: object
required:
- type
properties:
type:
const: boolean
const:
type: boolean
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment