版权所有 © 2014 Linux 基金会
本文档中的关键词“必须”、“禁止”、“必需”、“应”、“不应”、“应该”、“不应该”、“推荐”、“可能”和“可选”的解释方式如 [RFC2119] 中所述。
Swagger 规范根据 Apache 许可证 2.0 版 授权。
Swagger™ 是一个用于描述和记录 RESTful API 的项目。
Swagger 规范定义了一组描述此类 API 所需的文件。然后,Swagger-UI 项目可以使用这些文件来显示 API,而 Swagger-Codegen 可以使用这些文件生成各种语言的客户端。其他实用程序(如测试工具)也可以利用生成的文件。
版本 | 日期 | 备注 |
---|---|---|
2.0 | 2014-09-08 | Swagger 2.0 发布 |
1.2 | 2014-03-14 | 正式文档的初始发布。 |
1.1 | 2012-08-22 | Swagger 1.1 发布 |
1.0 | 2011-08-10 | Swagger 规范的首次发布 |
路径模板指的是使用花括号 ({}) 来标记 URL 路径的一部分,以便使用路径参数替换。
MIME 类型定义分散在多个资源中。MIME 类型定义应符合 [RFC6838]。
一些可能的 MIME 类型定义示例
text/plain; charset=utf-8
application/json
application/vnd.github+json
application/vnd.github.v3+json
application/vnd.github.v3.raw+json
application/vnd.github.v3.text+json
application/vnd.github.v3.html+json
application/vnd.github.v3.full+json
application/vnd.github.v3.diff
application/vnd.github.v3.patch
HTTP 状态码用于指示执行操作的状态。可用状态码由 [RFC7231] 第 6 节 和 IANA 状态码注册表 描述。
根据 Swagger 规范描述 RESTful API 的文件表示为 JSON 对象,并符合 JSON 标准。YAML 作为 JSON 的超集,也可以用来表示 Swagger 规范文件。
例如,如果说某个字段具有数组值,则将使用 JSON 数组表示法
{
"field" : [...]
}
虽然 API 使用 JSON 进行描述,但它本身并不强制 API 使用 JSON 作为输入/输出。
规范中的所有字段名称都区分大小写。
模式公开了两种类型的字段。固定字段,具有声明的名称;模式化字段,为字段名称声明正则表达式模式。模式化字段可以有多个出现,只要每个字段都有唯一的名称。
API 的 Swagger 表示由单个文件组成。但是,可以根据用户的意愿将定义的一部分拆分为单独的文件。这适用于规范中的 $ref
字段,这一点来自 JSON Schema 定义。
按照惯例,Swagger 规范文件名为 swagger.json
。
Swagger 规范中的原始数据类型基于 JSON-Schema 草案 4 支持的类型。模型使用 Schema 对象 进行描述,该对象是 JSON Schema 草案 4 的一个子集。
参数对象 和 响应对象 使用额外的原始数据类型 "file"
来设置参数类型或响应为文件。
原始数据类型有一个可选的修饰符属性 format
。Swagger 使用一些已知的格式来更精确地定义正在使用的类型。但是,format
属性是一个开放的 string
值属性,可以具有任何值以支持文档需求。即使未在此规范中定义,也可以使用诸如 "email"
、"uuid"
等格式。未附带 format
属性的类型遵循其在 JSON Schema 中的定义(除了上面定义的 file
类型)。Swagger 规范定义的格式为
通用名称 | 类型 |
格式 |
注释 |
---|---|---|---|
整数 | 整数 |
int32 |
有符号 32 位 |
长整数 | 整数 |
int64 |
有符号 64 位 |
浮点数 | 数字 |
浮点数 |
|
双精度浮点数 | 数字 |
双精度浮点数 |
|
字符串 | 字符串 |
||
字节 | 字符串 |
字节 |
base64 编码字符 |
二进制 | 字符串 |
二进制 |
任何字节序列 |
布尔值 | 布尔值 |
||
日期 | 字符串 |
日期 |
如 full-date 所定义 - [RFC3339] 第 5.6 节 |
日期时间 | 字符串 |
date-time |
如 date-time 所定义 - [RFC3339] 第 5.6 节 |
密码 | 字符串 |
密码 |
用于提示 UI 输入需要被隐藏。 |
这是 API 规范的根文档对象。它将之前版本 1.2 及更早版本的资源列表和 API 声明合并到一个文档中。
字段名称 | 类型 | 描述 |
---|---|---|
swagger | 字符串 |
必需。指定正在使用的 Swagger 规范版本。Swagger UI 和其他客户端可以使用它来解释 API 列表。值必须为 "2.0" 。 |
info | 信息对象 | 必需。提供有关 API 的元数据。如果需要,客户端可以使用这些元数据。 |
host | 字符串 |
提供 API 的主机(名称或 IP)。这必须仅为主机,不包括方案或子路径。它可以包含端口。如果未包含 host ,则使用提供文档的主机(包括端口)。host 不支持 路径模板。 |
basePath | 字符串 |
提供 API 的基本路径,相对于 host 。如果未包含它,则 API 将直接在 host 下提供。值必须以斜杠 (/ ) 开头。basePath 不支持 路径模板。 |
schemes | [string ] |
API 的传输协议。值必须来自以下列表:"http" 、"https" 、"ws" 、"wss" 。如果未包含 schemes ,则使用访问 Swagger 定义本身所用的默认方案。 |
consumes | [string ] |
API 可以使用的 MIME 类型列表。这对于所有 API 都是全局的,但可以在特定的 API 调用中被覆盖。值必须如 MIME 类型 中所述。 |
produces | [string ] |
API 可以生成的 MIME 类型列表。这对于所有 API 都是全局的,但可以在特定的 API 调用中被覆盖。值必须如 MIME 类型 中所述。 |
paths | 路径对象 | 必需。API 可用的路径和操作。 |
definitions | 定义对象 | 一个用于保存操作产生和使用的的数据类型的对象。 |
parameters | 参数定义对象 | 一个用于保存可以在操作之间使用的参数的对象。此属性不定义所有操作的全局参数。 |
responses | 响应定义对象 | 一个用于保存可以在操作之间使用的响应的对象。此属性不定义所有操作的全局响应。 |
securityDefinitions | 安全定义对象 | 可以在规范中使用的安全方案定义。 |
security | [安全需求对象] | 声明 API 整体应用哪些安全方案。值列表描述了可使用的替代安全方案(即,安全需求之间存在逻辑 OR)。各个操作可以覆盖此定义。 |
tags | [标签对象] | 规范使用的标签列表,以及其他元数据。标签的顺序可用于反映解析工具对其的顺序。并非 操作对象 使用的所有标签都必须声明。未声明的标签可以随机组织或基于工具的逻辑组织。列表中的每个标签名称必须唯一。 |
externalDocs | 外部文档对象 | 其他外部文档。 |
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
该对象提供有关 API 的元数据。如果需要,客户端可以使用这些元数据,并且为了方便起见,可以在 Swagger-UI 中显示这些元数据。
字段名称 | 类型 | 描述 |
---|---|---|
title | 字符串 |
必需。应用程序的标题。 |
description | 字符串 |
应用程序的简短描述。GFM 语法 可用于富文本表示。 |
termsOfService | 字符串 |
API 的服务条款。 |
contact | 联系对象 | 公开 API 的联系信息。 |
license | 许可证对象 | 公开 API 的许可证信息。 |
version | 字符串 |
必需提供应用程序 API 的版本(不要与规范版本混淆)。 |
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
{
"title": "Swagger Sample App",
"description": "This is a sample server Petstore server.",
"termsOfService": "https://swagger.org.cn/terms/",
"contact": {
"name": "API Support",
"url": "http://www.swagger.io/support",
"email": "[email protected]"
},
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
},
"version": "1.0.1"
}
title: Swagger Sample App
description: This is a sample server Petstore server.
termsOfService: https://swagger.org.cn/terms/
contact:
name: API Support
url: http://www.swagger.io/support
email: [email protected]
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
version: 1.0.1
公开 API 的联系信息。
字段名称 | 类型 | 描述 |
---|---|---|
name | 字符串 |
联系人/组织的识别名称。 |
url | 字符串 |
指向联系信息的 URL。 必须采用 URL 格式。 |
字符串 |
联系人/组织的电子邮件地址。 必须采用电子邮件地址格式。 |
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
{
"name": "API Support",
"url": "http://www.swagger.io/support",
"email": "[email protected]"
}
name: API Support
url: http://www.swagger.io/support
email: [email protected]
公开 API 的许可证信息。
字段名称 | 类型 | 描述 |
---|---|---|
name | 字符串 |
必需。API 使用的许可证名称。 |
url | 字符串 |
API 使用的许可证的 URL。 必须采用 URL 格式。 |
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
{
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
保存到各个端点的相对路径。路径附加到 basePath
以构建完整 URL。由于 ACL 约束,路径可能为空。
字段模式 | 类型 | 描述 |
---|---|---|
/{path} | 路径项对象 | 到单个端点的相对路径。字段名称必须以斜杠开头。路径附加到 basePath 以构建完整 URL。路径模板 是允许的。 |
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
{
"/pets": {
"get": {
"description": "Returns all pets from the system that the user has access to",
"produces": [
"application/json"
],
"responses": {
"200": {
"description": "A list of pets.",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/pet"
}
}
}
}
}
}
}
/pets:
get:
description: Returns all pets from the system that the user has access to
produces:
- application/json
responses:
'200':
description: A list of pets.
schema:
type: array
items:
$ref: '#/definitions/pet'
描述单个路径上可用的操作。由于 ACL 约束,路径项可能为空。路径本身仍然会显示给文档查看器,但他们将不知道哪些操作和参数可用。
字段名称 | 类型 | 描述 |
---|---|---|
$ref | 字符串 |
允许此路径项的外部定义。引用的结构必须采用 路径项对象 的格式。如果引用的定义和此路径项的定义之间存在冲突,则行为未定义。 |
get | 操作对象 | 在此路径上 GET 操作的定义。 |
put | 操作对象 | 在此路径上 PUT 操作的定义。 |
post | 操作对象 | 在此路径上 POST 操作的定义。 |
delete | 操作对象 | 在此路径上 DELETE 操作的定义。 |
options | 操作对象 | 在此路径上 OPTIONS 操作的定义。 |
head | 操作对象 | 在此路径上 HEAD 操作的定义。 |
patch | 操作对象 | 在此路径上 PATCH 操作的定义。 |
parameters | [参数对象 | 引用对象] | 此路径下描述的所有操作适用的参数列表。这些参数可以在操作级别被覆盖,但不能在那里被删除。列表不得包含重复的参数。唯一参数由 名称 和 位置 的组合定义。该列表可以使用 引用对象 来链接到在 Swagger 对象的参数 中定义的参数。最多只能有一个“body”参数。 |
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
{
"get": {
"description": "Returns pets based on ID",
"summary": "Find pets by ID",
"operationId": "getPetsById",
"produces": [
"application/json",
"text/html"
],
"responses": {
"200": {
"description": "pet response",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/Pet"
}
}
},
"default": {
"description": "error payload",
"schema": {
"$ref": "#/definitions/ErrorModel"
}
}
}
},
"parameters": [
{
"name": "id",
"in": "path",
"description": "ID of pet to use",
"required": true,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "csv"
}
]
}
get:
description: Returns pets based on ID
summary: Find pets by ID
operationId: getPetsById
produces:
- application/json
- text/html
responses:
'200':
description: pet response
schema:
type: array
items:
$ref: '#/definitions/Pet'
default:
description: error payload
schema:
$ref: '#/definitions/ErrorModel'
parameters:
- name: id
in: path
description: ID of pet to use
required: true
type: array
items:
type: string
collectionFormat: csv
描述路径上的单个 API 操作。
字段名称 | 类型 | 描述 |
---|---|---|
tags | [string ] |
用于 API 文档控制的标签列表。标签可用于根据资源或任何其他限定符对操作进行逻辑分组。 |
summary | 字符串 |
操作作用的简短摘要。为了在 swagger-ui 中获得最大的可读性,此字段应该少于 120 个字符。 |
description | 字符串 |
操作行为的详细说明。GFM 语法 可用于富文本表示。 |
externalDocs | 外部文档对象 | 此操作的其他外部文档。 |
operationId | 字符串 |
用于识别操作的唯一字符串。此 ID必须在 API 中描述的所有操作之间唯一。工具和库可以使用 operationId 来唯一地识别操作,因此,建议遵循常见的编程命名约定。 |
consumes | [string ] |
操作可以接收的 MIME 类型列表。这会覆盖 Swagger 对象中 consumes 的定义。空值 可以用于清除全局定义。值 必须按照 MIME 类型 中的描述进行定义。 |
produces | [string ] |
操作可以产生的 MIME 类型列表。这会覆盖 Swagger 对象中 produces 的定义。空值 可以用于清除全局定义。值 必须按照 MIME 类型 中的描述进行定义。 |
parameters | [参数对象 | 引用对象] | 适用于此操作的参数列表。如果参数已在 路径项目 中定义,则新定义将覆盖它,但永远不会将其移除。列表 绝不能包含重复的参数。唯一参数由 名称 和 位置 的组合定义。列表可以使用 引用对象 来链接到 Swagger 对象的参数 中定义的参数。最多只能有一个“body”参数。 |
responses | 响应对象 | 必填。执行此操作后返回的可能响应列表。 |
schemes | [string ] |
操作的传输协议。值 必须来自以下列表:"http" 、"https" 、"ws" 、"wss" 。该值会覆盖 Swagger 对象 schemes 的定义。 |
deprecated | 布尔值 |
声明此操作已弃用。应避免使用声明的操作。默认值为 false 。 |
security | [安全需求对象] | 声明对此操作应用哪些安全方案。值的列表描述了可使用的替代安全方案(即,安全需求之间存在逻辑或)。此定义会覆盖任何已声明的顶级 security 。要删除顶级安全声明,可以使用空数组。 |
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
{
"tags": [
"pet"
],
"summary": "Updates a pet in the store with form data",
"description": "",
"operationId": "updatePetWithForm",
"consumes": [
"application/x-www-form-urlencoded"
],
"produces": [
"application/json",
"application/xml"
],
"parameters": [
{
"name": "petId",
"in": "path",
"description": "ID of pet that needs to be updated",
"required": true,
"type": "string"
},
{
"name": "name",
"in": "formData",
"description": "Updated name of the pet",
"required": false,
"type": "string"
},
{
"name": "status",
"in": "formData",
"description": "Updated status of the pet",
"required": false,
"type": "string"
}
],
"responses": {
"200": {
"description": "Pet updated."
},
"405": {
"description": "Invalid input"
}
},
"security": [
{
"petstore_auth": [
"write:pets",
"read:pets"
]
}
]
}
tags:
- pet
summary: Updates a pet in the store with form data
description: ""
operationId: updatePetWithForm
consumes:
- application/x-www-form-urlencoded
produces:
- application/json
- application/xml
parameters:
- name: petId
in: path
description: ID of pet that needs to be updated
required: true
type: string
- name: name
in: formData
description: Updated name of the pet
required: false
type: string
- name: status
in: formData
description: Updated status of the pet
required: false
type: string
responses:
'200':
description: Pet updated.
'405':
description: Invalid input
security:
- petstore_auth:
- write:pets
- read:pets
允许引用外部资源以获取扩展文档。
字段名称 | 类型 | 描述 |
---|---|---|
description | 字符串 |
目标文档的简短描述。可以使用 GFM 语法 进行富文本表示。 |
url | 字符串 |
必填。目标文档的 URL。值 必须采用 URL 格式。 |
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
{
"description": "Find more info here",
"url": "https://swagger.org.cn"
}
description: Find more info here
url: https://swagger.org.cn
描述单个操作参数。
有五种可能的参数类型。
/items/{itemId}
中,路径参数为 itemId
。/items?id=###
中,查询参数为 id
。application/x-www-form-urlencoded
、multipart/form-data
或两者都用作请求的内容类型时(在 Swagger 的定义中,操作的 consumes
属性)。这是唯一可用于发送文件的参数类型,因此支持 file
类型。由于表单参数发送在有效负载中,因此它们不能与相同操作的主体参数一起声明。表单参数基于所使用的内容类型具有不同的格式(有关更多详细信息,请参阅 [HTML401] 第 17.13.4 节application/x-www-form-urlencoded
- 类似于查询参数的格式,但作为有效负载。例如,foo=1&bar=swagger
- foo
和 bar
都是表单参数。这通常用于正在传输的简单参数。multipart/form-data
- 每个参数在有效负载中占用一部分,并具有内部标头。例如,对于标头 Content-Disposition: form-data; name="submit-name"
,参数的名称为 submit-name
。这种类型的表单参数更常用于文件传输。字段名称 | 类型 | 描述 |
---|---|---|
name | 字符串 |
必填。参数的名称。参数名称区分大小写。 |
in | 字符串 |
必填。参数的位置。可能的值为“query”、“header”、“path”、“formData”或“body”。 |
description | 字符串 |
参数的简要描述。这可能包含使用示例。可以使用 GFM 语法 进行富文本表示。 |
required | 布尔值 |
确定此参数是否为必填。如果参数 in 为“path”,则此属性为必填,其值 必须为 true 。否则,可以包含此属性,其默认值为 false 。 |
如果 in
为 "body"
字段名称 | 类型 | 描述 |
---|---|---|
schema | 架构对象 | 必填。定义主体参数所用类型的架构。 |
如果 in
为除 "body"
之外的任何值
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
具有引用架构定义的主体参数(通常用于模型定义)
{
"name": "user",
"in": "body",
"description": "user to add to the system",
"required": true,
"schema": {
"$ref": "#/definitions/User"
}
}
name: user
in: body
description: user to add to the system
required: true
schema:
$ref: '#/definitions/User'
作为字符串值数组的主体参数
{
"name": "user",
"in": "body",
"description": "user to add to the system",
"required": true,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
}
name: user
in: body
description: user to add to the system
required: true
schema:
type: array
items:
type: string
具有 64 位整数数组的标头参数
{
"name": "token",
"in": "header",
"description": "token to be passed as a header",
"required": true,
"type": "array",
"items": {
"type": "integer",
"format": "int64"
},
"collectionFormat": "csv"
}
name: token
in: header
description: token to be passed as a header
required: true
type: array
items:
type: integer
format: int64
collectionFormat: csv
字符串值的路径参数
{
"name": "username",
"in": "path",
"description": "username to fetch",
"required": true,
"type": "string"
}
name: username
in: path
description: username to fetch
required: true
type: string
字符串值的可选查询参数,通过重复查询参数允许多个值
{
"name": "id",
"in": "query",
"description": "ID of the object to fetch",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
}
name: id
in: query
description: ID of the object to fetch
required: false
type: array
items:
type: string
collectionFormat: multi
用于文件上传的文件类型表单数据
{
"name": "avatar",
"in": "formData",
"description": "The avatar of the user",
"required": true,
"type": "file"
}
name: avatar
in: formData
description: The avatar of the user
required: true
type: file
JSON 架构的 items 对象的有限子集。它由不在 in
"body"
中的参数定义使用。
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
项必须是字符串类型,并且至少包含 2 个字符。
{
"type": "string",
"minLength": 2
}
type: string
minLength: 2
一个数组的数组,内部数组的类型为整数,数字必须在 0 到 63(包括)之间。
{
"type": "array",
"items": {
"type": "integer",
"minimum": 0,
"maximum": 63
}
}
type: array
items:
type: integer
minimum: 0
maximum: 63
操作预期响应的容器。该容器将 HTTP 响应代码映射到预期响应。文档不需要覆盖所有可能的 HTTP 响应代码,因为它们可能事先未知。但是,文档需要覆盖成功操作的响应和任何已知的错误。
default
可以用作所有未单独由规范涵盖的 HTTP 代码的默认响应对象。
Responses Object
必须包含至少一个响应代码,并且它应该是成功操作调用的响应。
字段名称 | 类型 | 描述 |
---|---|---|
default | Response Object | Reference Object | 除为特定 HTTP 响应代码声明的响应之外的响应文档。它可以用来覆盖未声明的响应。Reference Object 可用于链接到在Swagger Object’s responses部分定义的响应。 |
字段模式 | 类型 | 描述 |
---|---|---|
{HTTP 状态代码} | Response Object | Reference Object | 任何HTTP 状态代码都可以用作属性名称(每个 HTTP 状态代码一个属性)。描述该 HTTP 状态代码的预期响应。Reference Object 可用于链接到在Swagger Object’s responses部分定义的响应。 |
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
成功操作的 200 响应以及其他响应的默认响应(暗示错误)。
{
"200": {
"description": "a pet to be returned",
"schema": {
"$ref": "#/definitions/Pet"
}
},
"default": {
"description": "Unexpected error",
"schema": {
"$ref": "#/definitions/ErrorModel"
}
}
}
'200':
description: a pet to be returned
schema:
$ref: '#/definitions/Pet'
default:
description: Unexpected error
schema:
$ref: '#/definitions/ErrorModel'
描述 API 操作的单个响应。
字段名称 | 类型 | 描述 |
---|---|---|
description | 字符串 |
必需。响应的简短描述。GFM 语法可用于富文本表示。 |
schema | 架构对象 | 响应结构的定义。它可以是基本类型、数组或对象。如果此字段不存在,则表示没有内容作为响应的一部分返回。作为Schema Object的扩展,其根type 值也可能是"file" 。这应该与相关的produces MIME 类型一起使用。 |
headers | Headers Object | 与响应一起发送的标头列表。 |
examples | Example Object | 响应消息的示例。 |
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
复杂类型数组的响应。
{
"description": "A complex object array response",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/VeryComplexType"
}
}
}
description: A complex object array response
schema:
type: array
items:
$ref: '#/definitions/VeryComplexType'
带有字符串类型的响应。
{
"description": "A simple string response",
"schema": {
"type": "string"
}
}
description: A simple string response
schema:
type: string
带有标头的响应。
{
"description": "A simple string response",
"schema": {
"type": "string"
},
"headers": {
"X-Rate-Limit-Limit": {
"description": "The number of allowed requests in the current period",
"type": "integer"
},
"X-Rate-Limit-Remaining": {
"description": "The number of remaining requests in the current period",
"type": "integer"
},
"X-Rate-Limit-Reset": {
"description": "The number of seconds left in the current period",
"type": "integer"
}
}
}
description: A simple string response
schema:
type: string
headers:
X-Rate-Limit-Limit:
description: The number of allowed requests in the current period
type: integer
X-Rate-Limit-Remaining:
description: The number of remaining requests in the current period
type: integer
X-Rate-Limit-Reset:
description: The number of seconds left in the current period
type: integer
没有返回值的响应。
{
"description": "object created"
}
description: object created
列出可以作为响应的一部分发送的标头。
字段模式 | 类型 | 描述 |
---|---|---|
{name} | Header Object | 属性的名称对应于标头的名称。该值描述标头的类型。 |
速率限制标头。
{
"X-Rate-Limit-Limit": {
"description": "The number of allowed requests in the current period",
"type": "integer"
},
"X-Rate-Limit-Remaining": {
"description": "The number of remaining requests in the current period",
"type": "integer"
},
"X-Rate-Limit-Reset": {
"description": "The number of seconds left in the current period",
"type": "integer"
}
}
X-Rate-Limit-Limit:
description: The number of allowed requests in the current period
type: integer
X-Rate-Limit-Remaining:
description: The number of remaining requests in the current period
type: integer
X-Rate-Limit-Reset:
description: The number of seconds left in the current period
type: integer
允许共享操作响应的示例。
字段模式 | 类型 | 描述 |
---|---|---|
{MIME 类型} | 任何 | 属性的名称必须是操作produces 值之一(隐式或继承)。该值应该是此类响应的外观示例。 |
Pet 数据类型的 application/json MIME 类型的示例响应。
{
"application/json": {
"name": "Puma",
"type": "Dog",
"color": "Black",
"gender": "Female",
"breed": "Mixed"
}
}
application/json:
name: Puma
type: Dog
color: Black
gender: Female
breed: Mixed
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
一个简单的整数类型标头。
{
"description": "The number of allowed requests in the current period",
"type": "integer"
}
description: The number of allowed requests in the current period
type: integer
允许向由Operation Object使用的单个标签添加元数据。每个在那里使用的标签都不一定需要一个 Tag Object。
字段名称 | 类型 | 描述 |
---|---|---|
name | 字符串 |
必需。标签的名称。 |
description | 字符串 |
标签的简短描述。GFM 语法可用于富文本表示。 |
externalDocs | 外部文档对象 | 此标签的其他外部文档。 |
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
{
"name": "pet",
"description": "Pets operations"
}
name: pet
description: Pets operations
一个简单的对象,用于引用规范中的其他定义。它可以用来引用在顶级定义以供重复使用的参数和响应。
Reference Object 是一个JSON 参考,它使用 JSON 指针 [RFC6901] 作为其值。对于此规范,仅支持规范反引用。
字段名称 | 类型 | 描述 |
---|---|---|
$ref | 字符串 |
必需。参考字符串。 |
{
"$ref": "#/definitions/Pet"
}
$ref: '#/definitions/Pet'
{
"$ref": "Pet.json"
}
$ref: 'Pet.yaml'
{
"$ref": "definitions.json#/Pet"
}
$ref: 'definitions.yaml#/Pet'
Schema Object 允许定义输入和输出数据类型。这些类型可以是对象,也可以是基本类型和数组。此对象基于JSON Schema 规范草案 4,并使用其预定义的子集。在此子集之上,此规范提供了扩展以允许更完整的文档。
有关属性的更多信息,请参阅JSON Schema Core和JSON Schema Validation。除非另有说明,否则属性定义遵循此处引用的 JSON Schema 规范。
以下属性直接取自 JSON Schema 定义,并遵循相同的规范
以下属性取自 JSON Schema 定义,但其定义已调整为 Swagger 规范。其定义与 JSON Schema 中的定义相同,只是在原始定义引用 JSON Schema 定义时,使用Schema Object定义。
除了 JSON Schema 子集字段之外,以下字段可用于进一步的架构文档。
字段名称 | 类型 | 描述 |
---|---|---|
discriminator | 字符串 |
添加对多态性的支持。鉴别器是用于区分继承此架构的其他架构的架构属性名称。使用的属性名称必须在此架构中定义,并且它必须在required 属性列表中。使用时,该值必须是此架构或任何继承它的架构的名称。 |
readOnly | 布尔值 |
仅与 Schema "properties" 定义相关。将属性声明为“只读”。这意味着它可以作为响应的一部分发送,但绝不能作为请求的一部分发送。标记为readOnly 为true 的属性不应该在定义的架构的required 列表中。默认值为false 。 |
xml | XML Object | 这可以仅用于属性架构。它对根架构没有影响。添加其他元数据以描述此属性的 XML 表示格式。 |
externalDocs | 外部文档对象 | 此架构的其他外部文档。 |
example | 任何 | 一个自由格式的属性,用于包含此架构实例的示例。 |
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
Swagger 允许使用 JSON Schema 的allOf
属性组合和扩展模型定义,从而有效地提供模型组合。allOf
接收一个对象定义数组,这些定义独立验证,但共同构成一个对象。
虽然组合提供了模型的可扩展性,但它并不意味着模型之间存在层次结构。为了支持多态性,Swagger 添加了对discriminator
字段的支持。使用时,discriminator
将是用于确定使用哪个架构定义来验证模型结构的属性的名称。因此,discriminator
字段必须是必需字段。所选属性的值必须是definitions
属性下给模型的友好名称。因此,没有给定 ID 的内联架构定义不能用于多态性。
与 Swagger 的早期版本不同,模式定义也可用于描述基本类型和数组。
{
"type": "string",
"format": "email"
}
type: string
format: email
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"address": {
"$ref": "#/definitions/Address"
},
"age": {
"type": "integer",
"format": "int32",
"minimum": 0
}
}
}
type: object
required:
- name
properties:
name:
type: string
address:
$ref: '#/definitions/Address'
age:
type: integer
format: int32
minimum: 0
对于简单的字符串到字符串映射
{
"type": "object",
"additionalProperties": {
"type": "string"
}
}
type: object
additionalProperties:
type: string
对于字符串到模型的映射
{
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/ComplexModel"
}
}
type: object
additionalProperties:
$ref: '#/definitions/ComplexModel'
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"name": {
"type": "string"
}
},
"required": [
"name"
],
"example": {
"name": "Puma",
"id": 1
}
}
type: object
properties:
id:
type: integer
format: int64
name:
type: string
required:
- name
example:
name: Puma
id: 1
{
"definitions": {
"ErrorModel": {
"type": "object",
"required": [
"message",
"code"
],
"properties": {
"message": {
"type": "string"
},
"code": {
"type": "integer",
"minimum": 100,
"maximum": 600
}
}
},
"ExtendedErrorModel": {
"allOf": [
{
"$ref": "#/definitions/ErrorModel"
},
{
"type": "object",
"required": [
"rootCause"
],
"properties": {
"rootCause": {
"type": "string"
}
}
}
]
}
}
}
definitions:
ErrorModel:
type: object
required:
- message
- code
properties:
message:
type: string
code:
type: integer
minimum: 100
maximum: 600
ExtendedErrorModel:
allOf:
- $ref: '#/definitions/ErrorModel'
- type: object
required:
- rootCause
properties:
rootCause:
type: string
{
"definitions": {
"Pet": {
"type": "object",
"discriminator": "petType",
"properties": {
"name": {
"type": "string"
},
"petType": {
"type": "string"
}
},
"required": [
"name",
"petType"
]
},
"Cat": {
"description": "A representation of a cat",
"allOf": [
{
"$ref": "#/definitions/Pet"
},
{
"type": "object",
"properties": {
"huntingSkill": {
"type": "string",
"description": "The measured skill for hunting",
"default": "lazy",
"enum": [
"clueless",
"lazy",
"adventurous",
"aggressive"
]
}
},
"required": [
"huntingSkill"
]
}
]
},
"Dog": {
"description": "A representation of a dog",
"allOf": [
{
"$ref": "#/definitions/Pet"
},
{
"type": "object",
"properties": {
"packSize": {
"type": "integer",
"format": "int32",
"description": "the size of the pack the dog is from",
"default": 0,
"minimum": 0
}
},
"required": [
"packSize"
]
}
]
}
}
}
definitions:
Pet:
type: object
discriminator: petType
properties:
name:
type: string
petType:
type: string
required:
- name
- petType
Cat:
description: A representation of a cat
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
huntingSkill:
type: string
description: The measured skill for hunting
default: lazy
enum:
- clueless
- lazy
- adventurous
- aggressive
required:
- huntingSkill
Dog:
description: A representation of a dog
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
packSize:
type: integer
format: int32
description: the size of the pack the dog is from
default: 0
minimum: 0
required:
- packSize
一个元数据对象,允许更精细的 XML 模型定义。
使用数组时,不会推断 XML 元素名称(对于单数/复数形式),并且应使用 name
属性添加该信息。请参阅示例以了解预期行为。
字段名称 | 类型 | 描述 |
---|---|---|
name | 字符串 |
替换用于描述的模式属性的元素/属性的名称。在 Items 对象 (items ) 中定义时,它将影响列表中各个 XML 元素的名称。当与 type 为 array 一起定义(在 items 之外)时,它将影响包装元素,并且仅当 wrapped 为 true 时。如果 wrapped 为 false ,则将忽略它。 |
namespace | 字符串 |
命名空间定义的 URL。值SHOULD 采用 URL 的形式。 |
prefix | 字符串 |
用于 name 的前缀。 |
attribute | 布尔值 |
声明属性定义是否转换为属性而不是元素。默认值为 false 。 |
wrapped | 布尔值 |
MAY 仅用于数组定义。表示数组是否被包装(例如,<books><book/><book/></books> )或未包装(<book/><book/> )。默认值为 false 。仅当与 type 为 array 一起定义(在 items 之外)时,此定义才生效。 |
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
XML 对象定义的示例包含在 Schema 对象 的属性定义中,并附带其 XML 表示形式的示例。
基本字符串属性
{
"animals": {
"type": "string"
}
}
animals:
type: string
<animals>...</animals>
基本字符串数组属性(wrapped
默认值为 false
)
{
"animals": {
"type": "array",
"items": {
"type": "string"
}
}
}
animals:
type: array
items:
type: string
<animals>...</animals>
<animals>...</animals>
<animals>...</animals>
{
"animals": {
"type": "string",
"xml": {
"name": "animal"
}
}
}
animals:
type: string
xml:
name: animal
<animal>...</animal>
在此示例中,显示了完整的模型定义。
{
"Person": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32",
"xml": {
"attribute": true
}
},
"name": {
"type": "string",
"xml": {
"namespace": "https://swagger.org.cn/schema/sample",
"prefix": "sample"
}
}
}
}
}
Person:
type: object
properties:
id:
type: integer
format: int32
xml:
attribute: true
name:
type: string
xml:
namespace: https://swagger.org.cn/schema/sample
prefix: sample
<Person id="123">
<sample:name xmlns:sample="https://swagger.org.cn/schema/sample">example</sample:name>
</Person>
更改元素名称
{
"animals": {
"type": "array",
"items": {
"type": "string",
"xml": {
"name": "animal"
}
}
}
}
animals:
type: array
items:
type: string
xml:
name: animal
<animal>value</animal>
<animal>value</animal>
外部 name
属性对 XML 没有影响
{
"animals": {
"type": "array",
"items": {
"type": "string",
"xml": {
"name": "animal"
}
},
"xml": {
"name": "aliens"
}
}
}
animals:
type: array
items:
type: string
xml:
name: animal
xml:
name: aliens
<animal>value</animal>
<animal>value</animal>
即使数组被包装,如果未明确定义名称,则内部和外部都将使用相同的名称
{
"animals": {
"type": "array",
"items": {
"type": "string"
},
"xml": {
"wrapped": true
}
}
}
animals:
type: array
items:
type: string
xml:
wrapped: true
<animals>
<animals>value</animals>
<animals>value</animals>
</animals>
为了克服上述示例,可以使用以下定义
{
"animals": {
"type": "array",
"items": {
"type": "string",
"xml": {
"name": "animal"
}
},
"xml": {
"wrapped": true
}
}
}
animals:
type: array
items:
type: string
xml:
name: animal
xml:
wrapped: true
<animals>
<animal>value</animal>
<animal>value</animal>
</animals>
影响内部和外部名称
{
"animals": {
"type": "array",
"items": {
"type": "string",
"xml": {
"name": "animal"
}
},
"xml": {
"name": "aliens",
"wrapped": true
}
}
}
animals:
type: array
items:
type: string
xml:
name: animal
xml:
name: aliens
wrapped: true
<aliens>
<animal>value</animal>
<animal>value</animal>
</aliens>
如果我们更改外部元素但未更改内部元素
{
"animals": {
"type": "array",
"items": {
"type": "string"
},
"xml": {
"name": "aliens",
"wrapped": true
}
}
}
animals:
type: array
items:
type: string
xml:
name: aliens
wrapped: true
<aliens>
<aliens>value</aliens>
<aliens>value</aliens>
</aliens>
一个对象,用于保存操作可以消费和产生的数据类型。这些数据类型可以是基本类型、数组或模型。
字段模式 | 类型 | 描述 |
---|---|---|
{name} | 架构对象 | 单个定义,将“名称”映射到其定义的模式。 |
{
"Category": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"name": {
"type": "string"
}
}
},
"Tag": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"name": {
"type": "string"
}
}
}
}
Category:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
Tag:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
一个对象,用于保存要在操作中重复使用的参数。参数定义可以引用此处定义的参数。
这不定义全局操作参数。
字段模式 | 类型 | 描述 |
---|---|---|
{name} | 参数对象 | 单个参数定义,将“名称”映射到其定义的参数。 |
{
"skipParam": {
"name": "skip",
"in": "query",
"description": "number of items to skip",
"required": true,
"type": "integer",
"format": "int32"
},
"limitParam": {
"name": "limit",
"in": "query",
"description": "max records to return",
"required": true,
"type": "integer",
"format": "int32"
}
}
skipParam:
name: skip
in: query
description: number of items to skip
required: true
type: integer
format: int32
limitParam:
name: limit
in: query
description: max records to return
required: true
type: integer
format: int32
一个对象,用于保存要在操作中重复使用的响应。响应定义可以引用此处定义的响应。
这不定义全局操作响应。
字段模式 | 类型 | 描述 |
---|---|---|
{name} | 响应对象 | 单个响应定义,将“名称”映射到其定义的响应。 |
{
"NotFound": {
"description": "Entity not found."
},
"IllegalInput": {
"description": "Illegal input for operation."
},
"GeneralError": {
"description": "General Error",
"schema": {
"$ref": "#/definitions/GeneralError"
}
}
}
NotFound:
description: Entity not found.
IllegalInput:
description: Illegal input for operation.
GeneralError:
description: General Error
schema:
$ref: '#/definitions/GeneralError'
可用于规范中提供的安全方案的声明。这不会在操作上强制执行安全方案,而仅用于提供每个方案的相关详细信息。
字段模式 | 类型 | 描述 |
---|---|---|
{name} | 安全方案对象 | 单个安全方案定义,将“名称”映射到其定义的方案。 |
{
"api_key": {
"type": "apiKey",
"name": "api_key",
"in": "header"
},
"petstore_auth": {
"type": "oauth2",
"authorizationUrl": "https://swagger.org.cn/api/oauth/dialog",
"flow": "implicit",
"scopes": {
"write:pets": "modify pets in your account",
"read:pets": "read your pets"
}
}
}
api_key:
type: apiKey
name: api_key
in: header
petstore_auth:
type: oauth2
authorizationUrl: https://swagger.org.cn/api/oauth/dialog
flow: implicit
scopes:
write:pets: modify pets in your account
read:pets: read your pets
允许定义可由操作使用的安全方案。支持的方案包括基本身份验证、API 密钥(作为标头或查询参数)以及 OAuth2 的常用流程(隐式、密码、应用程序和访问代码)。
字段名称 | 类型 | 有效性 | 描述 |
---|---|---|---|
type | 字符串 |
任何 | 必需。安全方案的类型。有效值为 "basic" 、"apiKey" 或 "oauth2" 。 |
description | 字符串 |
任何 | 安全方案的简短描述。 |
name | 字符串 |
apiKey |
必需。要使用的标头或查询参数的名称。 |
in | 字符串 |
apiKey |
必需API 密钥的位置。有效值为 "query" 或 "header" 。 |
flow | 字符串 |
oauth2 |
必需。OAuth2 安全方案使用的流程。有效值为 "implicit" 、"password" 、"application" 或 "accessCode" 。 |
authorizationUrl | 字符串 |
oauth2 ("implicit" , "accessCode" ) |
必需。要用于此流程的授权 URL。这SHOULD 采用 URL 的形式。 |
tokenUrl | 字符串 |
oauth2 ("password" , "application" , "accessCode" ) |
必需。要用于此流程的令牌 URL。这SHOULD 采用 URL 的形式。 |
scopes | 作用域对象 | oauth2 |
必需。OAuth2 安全方案的可用作用域。 |
字段名称 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
{
"type": "basic"
}
type: basic
{
"type": "apiKey",
"name": "api_key",
"in": "header"
}
type: apiKey
name: api_key
in: header
{
"type": "oauth2",
"authorizationUrl": "https://swagger.org.cn/api/oauth/dialog",
"flow": "implicit",
"scopes": {
"write:pets": "modify pets in your account",
"read:pets": "read your pets"
}
}
type: oauth2
authorizationUrl: https://swagger.org.cn/api/oauth/dialog
flow: implicit
scopes:
write:pets: modify pets in your account
read:pets: read your pets
列出 OAuth2 安全方案的可用作用域。
字段模式 | 类型 | 描述 |
---|---|---|
{name} | 字符串 |
在作用域的名称与其简短描述(作为属性的值)之间进行映射。 |
字段模式 | 类型 | 描述 |
---|---|---|
^x- | 任何 | 允许 Swagger Schema 的扩展。字段名称必须以 x- 开头,例如 x-internal-id 。值可以是 null 、基本类型、数组或对象。有关详细信息,请参阅 供应商扩展。 |
{
"write:pets": "modify pets in your account",
"read:pets": "read your pets"
}
write:pets: modify pets in your account
read:pets: read your pets
列出执行此操作所需的安全性方案。该对象可以在其中声明多个安全性方案,这些方案都是必需的(即,方案之间存在逻辑 AND)。
每个属性使用的名称MUST 对应于 安全定义 中声明的安全方案。
字段模式 | 类型 | 描述 |
---|---|---|
{name} | [string ] |
每个名称都必须对应于 安全定义 中声明的安全方案。如果安全方案的类型为 "oauth2" ,则该值为执行所需的作用域名称列表。对于其他安全方案类型,数组MUST 为空。 |
{
"api_key": []
}
api_key: []
{
"petstore_auth": [
"write:pets",
"read:pets"
]
}
petstore_auth:
- write:pets
- read:pets
虽然 Swagger 规范试图适应大多数用例,但可以在某些点添加其他数据以扩展规范。
扩展属性始终以 "x-"
为前缀,并且可以具有任何有效的 JSON 格式值。
可用的工具可能支持也可能不支持扩展,但也可以扩展这些工具以添加请求的支持(如果工具是内部的或开源的)。
Swagger 规范中的一些对象可能会被声明并保持为空,或者完全删除,即使它们本质上是 API 文档的核心。
这样做的原因是为了允许对文档本身进行额外的访问控制层。虽然本身不是规范的一部分,但某些库可能会选择根据某种形式的身份验证/授权来允许访问文档的某些部分。
以下是两个示例