四好公路
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

914 lines
20 KiB

3 years ago
$id: 'https://spec.openapis.org/oas/3.1/schema/2021-04-15'
$schema: 'https://json-schema.org/draft/2020-12/schema'
type: object
properties:
openapi:
type: string
pattern: '^3\.1\.\d+(-.+)?$'
info:
$ref: '#/$defs/info'
jsonSchemaDialect:
$ref: '#/$defs/uri'
default: 'https://spec.openapis.org/oas/3.1/dialect/base'
servers:
type: array
items:
$ref: '#/$defs/server'
paths:
$ref: '#/$defs/paths'
webhooks:
type: object
additionalProperties:
$ref: '#/$defs/path-item-or-reference'
components:
$ref: '#/$defs/components'
security:
type: array
items:
$ref: '#/$defs/security-requirement'
tags:
type: array
items:
$ref: '#/$defs/tag'
externalDocs:
$ref: '#/$defs/external-documentation'
required:
- openapi
- info
anyOf:
- required:
- paths
- required:
- components
- required:
- webhooks
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
$defs:
info:
type: object
properties:
title:
type: string
summary:
type: string
description:
type: string
termsOfService:
type: string
contact:
$ref: '#/$defs/contact'
license:
$ref: '#/$defs/license'
version:
type: string
required:
- title
- version
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
contact:
type: object
properties:
name:
type: string
url:
type: string
email:
type: string
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
license:
type: object
properties:
name:
type: string
identifier:
type: string
url:
$ref: '#/$defs/uri'
required:
- name
oneOf:
- required:
- identifier
- required:
- url
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
server:
type: object
properties:
url:
$ref: '#/$defs/uri'
description:
type: string
variables:
type: object
additionalProperties:
$ref: '#/$defs/server-variable'
required:
- url
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
server-variable:
type: object
properties:
enum:
type: array
items:
type: string
minItems: 1
default:
type: string
descriptions:
type: string
required:
- default
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
components:
type: object
properties:
schemas:
type: object
additionalProperties:
$dynamicRef: '#meta'
responses:
type: object
additionalProperties:
$ref: '#/$defs/response-or-reference'
parameters:
type: object
additionalProperties:
$ref: '#/$defs/parameter-or-reference'
examples:
type: object
additionalProperties:
$ref: '#/$defs/example-or-reference'
requestBodies:
type: object
additionalProperties:
$ref: '#/$defs/request-body-or-reference'
headers:
type: object
additionalProperties:
$ref: '#/$defs/header-or-reference'
securitySchemes:
type: object
additionalProperties:
$ref: '#/$defs/security-scheme-or-reference'
links:
type: object
additionalProperties:
$ref: '#/$defs/link-or-reference'
callbacks:
type: object
additionalProperties:
$ref: '#/$defs/callbacks-or-reference'
pathItems:
type: object
additionalProperties:
$ref: '#/$defs/path-item-or-reference'
patternProperties:
'^(schemas|responses|parameters|examples|requestBodies|headers|securitySchemes|links|callbacks|pathItems)$':
$comment: Enumerating all of the property names in the regex above is necessary for unevaluatedProperties to work as expected
propertyNames:
pattern: '^[a-zA-Z0-9._-]+$'
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
paths:
type: object
patternProperties:
'^/':
$ref: '#/$defs/path-item'
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
path-item:
type: object
properties:
summary:
type: string
description:
type: string
servers:
type: array
items:
$ref: '#/$defs/server'
parameters:
type: array
items:
$ref: '#/$defs/parameter-or-reference'
patternProperties:
'^(get|put|post|delete|options|head|patch|trace)$':
$ref: '#/$defs/operation'
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
path-item-or-reference:
if:
required:
- $ref
then:
$ref: '#/$defs/reference'
else:
$ref: '#/$defs/path-item'
operation:
type: object
properties:
tags:
type: array
items:
type: string
summary:
type: string
description:
type: string
externalDocs:
$ref: '#/$defs/external-documentation'
operationId:
type: string
parameters:
type: array
items:
$ref: '#/$defs/parameter-or-reference'
requestBody:
$ref: '#/$defs/request-body-or-reference'
responses:
$ref: '#/$defs/responses'
callbacks:
type: object
additionalProperties:
$ref: '#/$defs/callbacks-or-reference'
deprecated:
default: false
type: boolean
security:
type: array
items:
$ref: '#/$defs/security-requirement'
servers:
type: array
items:
$ref: '#/$defs/server'
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
external-documentation:
type: object
properties:
description:
type: string
url:
$ref: '#/$defs/uri'
required:
- url
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
parameter:
type: object
properties:
name:
type: string
in:
enum:
- query
- header
- path
- cookie
description:
type: string
required:
default: false
type: boolean
deprecated:
default: false
type: boolean
allowEmptyValue:
default: false
type: boolean
schema:
$dynamicRef: '#meta'
content:
$ref: '#/$defs/content'
required:
- in
oneOf:
- required:
- schema
- required:
- content
dependentSchemas:
schema:
properties:
style:
type: string
explode:
type: boolean
allowReserved:
default: false
type: boolean
allOf:
- $ref: '#/$defs/examples'
- $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:
properties:
in:
const: path
required:
- in
then:
properties:
style:
default: simple
enum:
- matrix
- label
- simple
required:
const: true
required:
- required
styles-for-header:
if:
properties:
in:
const: header
required:
- in
then:
properties:
style:
default: simple
enum:
- simple
styles-for-query:
if:
properties:
in:
const: query
required:
- in
then:
properties:
style:
default: form
enum:
- form
- spaceDelimited
- pipeDelimited
- deepObject
styles-for-cookie:
if:
properties:
in:
const: cookie
required:
- in
then:
properties:
style:
default: form
enum:
- form
styles-for-form:
if:
properties:
style:
const: form
required:
- style
then:
properties:
explode:
default: true
else:
properties:
explode:
default: false
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
parameter-or-reference:
if:
required:
- $ref
then:
$ref: '#/$defs/reference'
else:
$ref: '#/$defs/parameter'
request-body:
type: object
properties:
description:
type: string
content:
$ref: '#/$defs/content'
required:
default: false
type: boolean
required:
- content
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
request-body-or-reference:
if:
required:
- $ref
then:
$ref: '#/$defs/reference'
else:
$ref: '#/$defs/request-body'
content:
type: object
additionalProperties:
$ref: '#/$defs/media-type'
propertyNames:
format: media-range
media-type:
type: object
properties:
schema:
$dynamicRef: '#meta'
encoding:
type: object
additionalProperties:
$ref: '#/$defs/encoding'
allOf:
- $ref: '#/$defs/specification-extensions'
- $ref: '#/$defs/examples'
unevaluatedProperties: false
encoding:
type: object
properties:
contentType:
type: string
format: media-range
headers:
type: object
additionalProperties:
$ref: '#/$defs/header-or-reference'
style:
default: form
enum:
- form
- spaceDelimited
- pipeDelimited
- deepObject
explode:
type: boolean
allowReserved:
default: false
type: boolean
allOf:
- $ref: '#/$defs/specification-extensions'
- $ref: '#/$defs/encoding/$defs/explode-default'
unevaluatedProperties: false
$defs:
explode-default:
if:
properties:
style:
const: form
required:
- style
then:
properties:
explode:
default: true
else:
properties:
explode:
default: false
responses:
type: object
properties:
default:
$ref: '#/$defs/response-or-reference'
patternProperties:
'^[1-5][0-9X]{2}$':
$ref: '#/$defs/response-or-reference'
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
response:
type: object
properties:
description:
type: string
headers:
type: object
additionalProperties:
$ref: '#/$defs/header-or-reference'
content:
$ref: '#/$defs/content'
links:
type: object
additionalProperties:
$ref: '#/$defs/link-or-reference'
required:
- description
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
response-or-reference:
if:
required:
- $ref
then:
$ref: '#/$defs/reference'
else:
$ref: '#/$defs/response'
callbacks:
type: object
$ref: '#/$defs/specification-extensions'
additionalProperties:
$ref: '#/$defs/path-item-or-reference'
callbacks-or-reference:
if:
required:
- $ref
then:
$ref: '#/$defs/reference'
else:
$ref: '#/$defs/callbacks'
example:
type: object
properties:
summary:
type: string
description:
type: string
value: true
externalValue:
$ref: '#/$defs/uri'
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
example-or-reference:
if:
required:
- $ref
then:
$ref: '#/$defs/reference'
else:
$ref: '#/$defs/example'
link:
type: object
properties:
operationRef:
$ref: '#/$defs/uri'
operationId: true
parameters:
$ref: '#/$defs/map-of-strings'
requestBody: true
description:
type: string
body:
$ref: '#/$defs/server'
oneOf:
- required:
- operationRef
- required:
- operationId
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
link-or-reference:
if:
required:
- $ref
then:
$ref: '#/$defs/reference'
else:
$ref: '#/$defs/link'
header:
type: object
properties:
description:
type: string
required:
default: false
type: boolean
deprecated:
default: false
type: boolean
allowEmptyValue:
default: false
type: boolean
dependentSchemas:
schema:
properties:
style:
default: simple
enum:
- simple
explode:
default: false
type: boolean
allowReserved:
default: false
type: boolean
schema:
$dynamicRef: '#meta'
$ref: '#/$defs/examples'
content:
properties:
content:
$ref: '#/$defs/content'
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
header-or-reference:
if:
required:
- $ref
then:
$ref: '#/$defs/reference'
else:
$ref: '#/$defs/header'
tag:
type: object
properties:
name:
type: string
description:
type: string
externalDocs:
$ref: '#/$defs/external-documentation'
required:
- name
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
reference:
type: object
properties:
$ref:
$ref: '#/$defs/uri'
summary:
type: string
description:
type: string
unevaluatedProperties: false
schema:
$dynamicAnchor: meta
type:
- object
- boolean
security-scheme:
type: object
properties:
type:
enum:
- apiKey
- http
- mutualTLS
- oauth2
- openIdConnect
description:
type: string
required:
- type
allOf:
- $ref: '#/$defs/specification-extensions'
- $ref: '#/$defs/security-scheme/$defs/type-apikey'
- $ref: '#/$defs/security-scheme/$defs/type-http'
- $ref: '#/$defs/security-scheme/$defs/type-http-bearer'
- $ref: '#/$defs/security-scheme/$defs/type-oauth2'
- $ref: '#/$defs/security-scheme/$defs/type-oidc'
unevaluatedProperties: false
$defs:
type-apikey:
if:
properties:
type:
const: apiKey
required:
- type
then:
properties:
name:
type: string
in:
enum:
- query
- header
- cookie
required:
- name
- in
type-http:
if:
properties:
type:
const: http
required:
- type
then:
properties:
scheme:
type: string
required:
- scheme
type-http-bearer:
if:
properties:
type:
const: http
scheme:
const: bearer
required:
- type
- scheme
then:
properties:
bearerFormat:
type: string
required:
- scheme
type-oauth2:
if:
properties:
type:
const: oauth2
required:
- type
then:
properties:
flows:
$ref: '#/$defs/oauth-flows'
required:
- flows
type-oidc:
if:
properties:
type:
const: openIdConnect
required:
- type
then:
properties:
openIdConnectUrl:
$ref: '#/$defs/uri'
required:
- openIdConnectUrl
security-scheme-or-reference:
if:
required:
- $ref
then:
$ref: '#/$defs/reference'
else:
$ref: '#/$defs/security-scheme'
oauth-flows:
type: object
properties:
implicit:
$ref: '#/$defs/oauth-flows/$defs/implicit'
password:
$ref: '#/$defs/oauth-flows/$defs/password'
clientCredentials:
$ref: '#/$defs/oauth-flows/$defs/client-credentials'
authorizationCode:
$ref: '#/$defs/oauth-flows/$defs/authorization-code'
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
$defs:
implicit:
type: object
properties:
authorizationUrl:
type: string
refreshUrl:
type: string
scopes:
$ref: '#/$defs/map-of-strings'
required:
- authorizationUrl
- scopes
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
password:
type: object
properties:
tokenUrl:
type: string
refreshUrl:
type: string
scopes:
$ref: '#/$defs/map-of-strings'
required:
- tokenUrl
- scopes
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
client-credentials:
type: object
properties:
tokenUrl:
type: string
refreshUrl:
type: string
scopes:
$ref: '#/$defs/map-of-strings'
required:
- tokenUrl
- scopes
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
authorization-code:
type: object
properties:
authorizationUrl:
type: string
tokenUrl:
type: string
refreshUrl:
type: string
scopes:
$ref: '#/$defs/map-of-strings'
required:
- authorizationUrl
- tokenUrl
- scopes
$ref: '#/$defs/specification-extensions'
unevaluatedProperties: false
security-requirement:
type: object
additionalProperties:
type: array
items:
type: string
specification-extensions:
patternProperties:
'^x-': true
examples:
properties:
example: true
examples:
type: object
additionalProperties:
$ref: '#/$defs/example-or-reference'
uri:
type: string
format: uri
map-of-strings:
type: object
additionalProperties:
type: string