starlight-server 1.2.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -1
- package/dist/demo/index.js +41 -27
- package/dist/http/cors.d.ts +33 -0
- package/dist/http/cors.js +33 -0
- package/dist/http/index.d.ts +1 -0
- package/dist/http/index.js +1 -0
- package/dist/http/mime-types.js +1 -20
- package/dist/http/request.d.ts +18 -2
- package/dist/http/request.js +28 -7
- package/dist/http/response.d.ts +9 -5
- package/dist/http/response.js +16 -8
- package/dist/http/server.d.ts +1 -1
- package/dist/http/server.js +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -2
- package/dist/logging.d.ts +4 -3
- package/dist/logging.js +7 -19
- package/dist/router/helpers.d.ts +6 -0
- package/dist/router/helpers.js +24 -0
- package/dist/router/index.d.ts +67 -38
- package/dist/router/index.js +107 -36
- package/dist/router/match-path.d.ts +13 -0
- package/dist/router/match-path.js +160 -0
- package/dist/swagger/factories.d.ts +143 -0
- package/dist/swagger/factories.js +231 -0
- package/dist/swagger/index.d.ts +54 -6
- package/dist/swagger/index.js +94 -58
- package/dist/swagger/specification.d.ts +802 -0
- package/dist/swagger/specification.js +130 -0
- package/package.json +10 -10
- package/src/demo/index.ts +45 -42
- package/src/http/cors.ts +59 -0
- package/src/http/index.ts +1 -0
- package/src/http/mime-types.ts +1 -20
- package/src/http/request.ts +38 -10
- package/src/http/response.ts +18 -17
- package/src/http/server.ts +2 -2
- package/src/index.ts +3 -2
- package/src/logging.ts +7 -21
- package/src/router/helpers.ts +27 -0
- package/src/router/index.ts +141 -38
- package/src/router/match-path.ts +178 -0
- package/src/swagger/factories.ts +345 -0
- package/src/swagger/index.ts +113 -80
- package/src/swagger/specification.ts +823 -0
- package/dist/router/cors.d.ts +0 -24
- package/dist/router/cors.js +0 -35
- package/dist/router/match.d.ts +0 -23
- package/dist/router/match.js +0 -172
- package/dist/router/parameters.d.ts +0 -50
- package/dist/router/parameters.js +0 -118
- package/dist/router/router.d.ts +0 -128
- package/dist/router/router.js +0 -97
- package/dist/swagger/factory.d.ts +0 -97
- package/dist/swagger/factory.js +0 -144
- package/dist/swagger/openapi-spec.d.ts +0 -261
- package/dist/swagger/openapi-spec.js +0 -5
- package/dist/validators/array.d.ts +0 -9
- package/dist/validators/array.js +0 -28
- package/dist/validators/boolean.d.ts +0 -4
- package/dist/validators/boolean.js +0 -28
- package/dist/validators/common.d.ts +0 -23
- package/dist/validators/common.js +0 -25
- package/dist/validators/index.d.ts +0 -20
- package/dist/validators/index.js +0 -38
- package/dist/validators/number.d.ts +0 -10
- package/dist/validators/number.js +0 -30
- package/dist/validators/object.d.ts +0 -13
- package/dist/validators/object.js +0 -36
- package/dist/validators/string.d.ts +0 -11
- package/dist/validators/string.js +0 -29
- package/src/.DS_Store +0 -0
- package/src/router/cors.ts +0 -54
- package/src/router/match.ts +0 -194
- package/src/router/parameters.ts +0 -175
- package/src/router/router.ts +0 -234
- package/src/swagger/factory.ts +0 -169
- package/src/swagger/openapi-spec.ts +0 -312
- package/src/validators/array.ts +0 -33
- package/src/validators/boolean.ts +0 -23
- package/src/validators/common.ts +0 -46
- package/src/validators/index.ts +0 -50
- package/src/validators/number.ts +0 -36
- package/src/validators/object.ts +0 -41
- package/src/validators/string.ts +0 -38
|
@@ -0,0 +1,802 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI Specification
|
|
3
|
+
* https://swagger.io/specification/
|
|
4
|
+
*
|
|
5
|
+
* ---------------------
|
|
6
|
+
*
|
|
7
|
+
* # 概念解释
|
|
8
|
+
*
|
|
9
|
+
* Operation
|
|
10
|
+
* 即通常说的“接口”。
|
|
11
|
+
* OpenAPI 遵循 RESTFul 的思路,一个路径代表一项资源,每个 HTTP Method 代表对此资源的一项操作(Operation)。
|
|
12
|
+
*
|
|
13
|
+
* Tag
|
|
14
|
+
* 接口标签,可以理解为是接口分组。
|
|
15
|
+
* 一个接口可以有多个标签,即接口能归属多个分组。
|
|
16
|
+
*
|
|
17
|
+
* Security Scheme
|
|
18
|
+
* 认证方案。基于 OAuth 等标准制定的具体执行方案。
|
|
19
|
+
*
|
|
20
|
+
* Security Requirement
|
|
21
|
+
* 认证要求。
|
|
22
|
+
* 要求发起请求时必须实现一种或多种“认证方案”。
|
|
23
|
+
* 一个接口可以有多套“认证要求”,请求方选择其中一种来实现。
|
|
24
|
+
* (注意是选择一种“要求”,而不是选择“要求”里的一种“方案”)。
|
|
25
|
+
*
|
|
26
|
+
* Link
|
|
27
|
+
* 接口关联。
|
|
28
|
+
* 接口之间可能有关联关系,例如 `/schools/:id` 和 `/schools/:schoolId/classes/:id` 就是相关的接口,
|
|
29
|
+
* 并且前者的 `id` 参数对应后者的 `schoolId` 参数。
|
|
30
|
+
* “接口关联”就是用来记录下这些关系。
|
|
31
|
+
*
|
|
32
|
+
* Webhook
|
|
33
|
+
* 由“接口提供方”主动请求“接口使用者”的网址,例如在某些事件发生时通知使用者。
|
|
34
|
+
*
|
|
35
|
+
* Callback
|
|
36
|
+
* 接口回调:某个接口被调用后,反过来请求“请求发起者”的网址。
|
|
37
|
+
* 例如像微信授权流程:“使用者”请求授权接口 - “微信”反过来请求“使用者”的网址来传递授权结果
|
|
38
|
+
* 注意:Callback 和 Webhook 很像,不过一个是“调用接口后”反过来被请求;另一个是跟接口调用无关,单纯被“接口提供方”调用。
|
|
39
|
+
*
|
|
40
|
+
* Data Type
|
|
41
|
+
* 数据类型(string、number、boolean、array、object...)。
|
|
42
|
+
*
|
|
43
|
+
* Schema
|
|
44
|
+
* 数据规范:定义一种数据的“数据格式”和“验证规则”。
|
|
45
|
+
* - “数据格式”包含数据类型(Data Type)信息,对于 object,也包含对象接口信息。
|
|
46
|
+
* 它决定了数据以什么形态存在,例如在内存中怎么存储。
|
|
47
|
+
* - 验证规则则是像“字符串长度在 8 ~ 16 之间”等“业务”上的要求,它与数据的存在方式无关,但决定了数据是否符合业务需求。
|
|
48
|
+
*
|
|
49
|
+
* Media Type
|
|
50
|
+
* 以特定 MIME Type 传递的内容的 Schema 和范例。
|
|
51
|
+
* 固定以 { [MIMEType]: MediaType } 的形式出现。
|
|
52
|
+
*
|
|
53
|
+
* ---------------------
|
|
54
|
+
*
|
|
55
|
+
* # 字符串扩展
|
|
56
|
+
*
|
|
57
|
+
* CommonMark
|
|
58
|
+
* 支持 CommonMark 格式的富文本字符串
|
|
59
|
+
*
|
|
60
|
+
* MIME Type
|
|
61
|
+
* 表示 MIME Type 的字符串,如:application/json。
|
|
62
|
+
* 凡是可指定 MIME Type 字符串的地方,都支持通配符 `image/*`,并可用逗号分隔多项 `image/jpg,image/png`。
|
|
63
|
+
*
|
|
64
|
+
* Runtime Expression
|
|
65
|
+
* 可通过此表达式结合请求信息计算出一个 URL。
|
|
66
|
+
* 详见 <https://swagger.io/specification/#runtime-expressions>
|
|
67
|
+
*
|
|
68
|
+
* ---------------------
|
|
69
|
+
*
|
|
70
|
+
* # 请求参数序列化(Parameter Style)
|
|
71
|
+
*
|
|
72
|
+
* 发起请求时要携带参数,如果业务上要求参数值不是纯文本(如数组、对象),那么需要经过格式化才能传递。
|
|
73
|
+
*
|
|
74
|
+
* 例如一个接口批量返回若干本书的详情:`GET /books`,并通过 `id_list` 参数指定一系列书的 ID。
|
|
75
|
+
* 这个 id_list 应该是一个数组 `[1,2,3]`,但 HTTP 请求只能传递纯文本,需要把数组 `序列化` 成纯文本来传递。
|
|
76
|
+
* 最常见的办法,是把 `id_list` 放在 query 里,多个 ID 用逗号分隔:`/books?id_list=1,2,3`,这种序列化方式在 OpenAPI 规范里被称为 `form`。
|
|
77
|
+
* 还有一种办法是直接加在 path 里:`/books/1,2,3`,这种方式被称为 `simple`。
|
|
78
|
+
* 以上都是使用 OpenAPI 规范里预设的序列化方式(Parameter Style)来序列化参数,这被称为是 `简单场景的参数`。
|
|
79
|
+
*
|
|
80
|
+
* 另外,还可以由服务器端和客户端约定,用某种 MIME Type(如 application/json)的格式序列化参数:`/books/?id_list=[1,2,3]`。
|
|
81
|
+
* 这被称为 `复杂场景的参数`(即“预设方案满足不了需求场景”的参数)。
|
|
82
|
+
*
|
|
83
|
+
* ## 预设序列化方式(Parameter Style)列表
|
|
84
|
+
*
|
|
85
|
+
* ----------------------------------------------------------
|
|
86
|
+
* 序列化方式 | 支持数据类型 | 支持的参数位置
|
|
87
|
+
* ----------------------------------------------------------
|
|
88
|
+
* matrix | primitive,array,object | path
|
|
89
|
+
* label | primitive,array,object | path
|
|
90
|
+
* form | primitive,array,object | query,cookie
|
|
91
|
+
* simple | primitive,array | path,header
|
|
92
|
+
* spaceDelimited | array,object | query
|
|
93
|
+
* pipeDelimited | array,object | query
|
|
94
|
+
* deepObject | object | query
|
|
95
|
+
*
|
|
96
|
+
* ## 各参数位置默认的序列化方式
|
|
97
|
+
*
|
|
98
|
+
* - path: simple
|
|
99
|
+
* - query: form
|
|
100
|
+
* - header: simple
|
|
101
|
+
* - cookie: form
|
|
102
|
+
*
|
|
103
|
+
* ## 参数值范例
|
|
104
|
+
*
|
|
105
|
+
* 假设有一个名为 `color` 的参数,有以下几种值之一:
|
|
106
|
+
* ```
|
|
107
|
+
* string -> "blue"
|
|
108
|
+
* array -> ["blue", "black", "brown"]
|
|
109
|
+
* object -> { "R": 100, "G": 200, "B": 150 }
|
|
110
|
+
* ```
|
|
111
|
+
*
|
|
112
|
+
* -----------------------------------------------------------------------------------------------------------------------------------
|
|
113
|
+
* 序列化方式 | 拆分传递 | 空值 | string | array | object
|
|
114
|
+
* -----------------------------------------------------------------------------------------------------------------------------------
|
|
115
|
+
* matrix | 否 | ;color | ;color=blue | ;color=blue;black;brown | ;color=R,100,G,200,B,150
|
|
116
|
+
* matrix | 是 | ;color | ;color=blue | ;color=blue;color=black;color=brown | ;R=100;G=200;B=150
|
|
117
|
+
* label | 否 | . | .blue | .blue.black.brown | .R.100.G.200.B.150
|
|
118
|
+
* label | 是 | . | .blue | .blue.black.brown | .R=100.G=200.B=150
|
|
119
|
+
* form | 否 | color= | color=blue | color=blue,black,brown | color=R,100,G,200,B,150
|
|
120
|
+
* form | 是 | color= | color=blue | color=blue&color=black&color=brown | R=100&G=200&B=150
|
|
121
|
+
* simple | 否 | 不支持 | blue | blue,black,brown | R,100,G,200,B,150
|
|
122
|
+
* simple | 是 | 不支持 | blue | blue,black,brown | R=100,G=200,B=150
|
|
123
|
+
* spaceDelimited | 否 | 不支持 | 不支持 | blue%20black%20brown | R%20100%20G%20200%20B%20150
|
|
124
|
+
* pipeDelimited | 否 | 不支持 | 不支持 | blue|black|brown | R|100|G|200|B|150
|
|
125
|
+
* deepObject | 是 | 不支持 | 不支持 | 不支持 | color[R]=100&color[G]=200&color[B]=150
|
|
126
|
+
*
|
|
127
|
+
* 注:拆分传递就是值有多项(即值是 array 或 object)时,每项分别传递:`a=1&a=2&a=3`;
|
|
128
|
+
* 反之则是一次性传递:`a=1,2,3`
|
|
129
|
+
*/
|
|
130
|
+
export interface OpenAPI {
|
|
131
|
+
/** OpenAPI 规范版本 */
|
|
132
|
+
openapi: '3.1.0';
|
|
133
|
+
/** 对此接口文档的介绍 */
|
|
134
|
+
info: Info;
|
|
135
|
+
/**
|
|
136
|
+
* 指定 Schema 定义中 $schema 的默认值,必须是合法的 URI
|
|
137
|
+
* 对 $schema 的介绍详见:<https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-00#section-8.1.1>
|
|
138
|
+
*/
|
|
139
|
+
jsonSchemaDialect?: string;
|
|
140
|
+
/** 服务器网址列表 */
|
|
141
|
+
servers?: Server[];
|
|
142
|
+
/** [核心] 接口路径列表 */
|
|
143
|
+
paths: Paths;
|
|
144
|
+
/**
|
|
145
|
+
* 定义“接口提供方”可能主动请求“接口使用者”的情况,例如做某些通知。
|
|
146
|
+
* “接口使用者”可根据需要有选择性地实现这些 webhook 来接收通知。
|
|
147
|
+
*/
|
|
148
|
+
webhooks?: {
|
|
149
|
+
[name: string]: PathItem | Reference;
|
|
150
|
+
};
|
|
151
|
+
/** [核心] 定义可重用内容(可通过 $ref 引用这里的内容) */
|
|
152
|
+
components?: Components;
|
|
153
|
+
/**
|
|
154
|
+
* 此文档内接口的认证要求列表,调用接口时选择其中一种来完成认证。
|
|
155
|
+
* 部分接口可能单独定义自己的认证要求。
|
|
156
|
+
*/
|
|
157
|
+
security?: SecurityRequirement[];
|
|
158
|
+
/** 定义各接口标签的具体信息(定义接口时只指定了标签名,这里可以进一步描述标签) */
|
|
159
|
+
tags?: Tag[];
|
|
160
|
+
/** 外部文档 */
|
|
161
|
+
externalDocs?: ExternalDocumentation;
|
|
162
|
+
}
|
|
163
|
+
/** 对此接口文档的介绍 */
|
|
164
|
+
export interface Info extends Extensions {
|
|
165
|
+
/** 文档标题 */
|
|
166
|
+
title: string;
|
|
167
|
+
/** 文档内容概述 */
|
|
168
|
+
summary?: string;
|
|
169
|
+
/** 详细介绍(CommonMark) */
|
|
170
|
+
description?: string;
|
|
171
|
+
/** TOS */
|
|
172
|
+
termsOfService?: string;
|
|
173
|
+
/** 联系人 */
|
|
174
|
+
contact?: Contact;
|
|
175
|
+
/** 版权信息 */
|
|
176
|
+
license?: License;
|
|
177
|
+
/** 接口文档的版本(注意不是 OpenAPI 规范的版本) */
|
|
178
|
+
version: string;
|
|
179
|
+
}
|
|
180
|
+
/** 接口文档的联系人信息 */
|
|
181
|
+
export interface Contact extends Extensions {
|
|
182
|
+
name?: string;
|
|
183
|
+
url?: string;
|
|
184
|
+
email?: string;
|
|
185
|
+
}
|
|
186
|
+
/** 接口文档版权信息 */
|
|
187
|
+
export interface License extends Extensions {
|
|
188
|
+
name: string;
|
|
189
|
+
url?: string;
|
|
190
|
+
}
|
|
191
|
+
/** 服务器定义 */
|
|
192
|
+
export interface Server extends Extensions {
|
|
193
|
+
/** 服务器网址 */
|
|
194
|
+
url: string;
|
|
195
|
+
/** 服务器介绍(CommonMark) */
|
|
196
|
+
description?: string;
|
|
197
|
+
/** 定义可插入到 URL 中的变量列表 */
|
|
198
|
+
variables?: {
|
|
199
|
+
[variableName: string]: ServerVariable;
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/** 服务器 URL 变量定义 */
|
|
203
|
+
export interface ServerVariable extends Extensions {
|
|
204
|
+
/** 变量的可选值,不指定则变量可以是任意值。不允许为空数组(不然就变成所有值都不允许了) */
|
|
205
|
+
enum?: string[];
|
|
206
|
+
/** 变量的默认值 */
|
|
207
|
+
default: string;
|
|
208
|
+
/** 详细介绍(CommonMark) */
|
|
209
|
+
description: string;
|
|
210
|
+
}
|
|
211
|
+
/** 可重用内容集合 */
|
|
212
|
+
export interface Components extends Extensions {
|
|
213
|
+
/** 数据格式(可用在请求和响应内容中) */
|
|
214
|
+
schemas?: {
|
|
215
|
+
[name: string]: Schema;
|
|
216
|
+
};
|
|
217
|
+
/** 响应内容 */
|
|
218
|
+
responses?: {
|
|
219
|
+
[name: string]: Response | Reference;
|
|
220
|
+
};
|
|
221
|
+
/** 请求参数 */
|
|
222
|
+
parameters?: {
|
|
223
|
+
[name: string]: Parameter | Reference;
|
|
224
|
+
};
|
|
225
|
+
/** 范例 */
|
|
226
|
+
examples?: {
|
|
227
|
+
[name: string]: Example | Reference;
|
|
228
|
+
};
|
|
229
|
+
/** 请求体 */
|
|
230
|
+
requestBodies?: {
|
|
231
|
+
[name: string]: RequestBody | Reference;
|
|
232
|
+
};
|
|
233
|
+
/** HTTP Header 定义 */
|
|
234
|
+
headers?: {
|
|
235
|
+
[name: string]: Header | Reference;
|
|
236
|
+
};
|
|
237
|
+
/** 认证方案 */
|
|
238
|
+
securitySchemes?: {
|
|
239
|
+
[name: string]: SecurityScheme | Reference;
|
|
240
|
+
};
|
|
241
|
+
/** 接口关联信息 */
|
|
242
|
+
links?: {
|
|
243
|
+
[name: string]: Link | Reference;
|
|
244
|
+
};
|
|
245
|
+
/** 接口回调(接口被调用后,反过来请求“请求发起者”的网址) */
|
|
246
|
+
callbacks?: {
|
|
247
|
+
[name: string]: Callback | Reference;
|
|
248
|
+
};
|
|
249
|
+
/** 对某一接口路径的定义 */
|
|
250
|
+
pathItems?: {
|
|
251
|
+
[name: string]: PathItem | Reference;
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* 接口路径列表
|
|
256
|
+
* path 须以 '/' 开头,支持路径参数 `/pets/{petId}`
|
|
257
|
+
*/
|
|
258
|
+
export interface Paths extends LooseExtensions {
|
|
259
|
+
[path: string]: PathItem;
|
|
260
|
+
}
|
|
261
|
+
/** 对某一资源路径的定义(接口都定义在资源路径下) */
|
|
262
|
+
export type PathItem = PathItemContent | Reference;
|
|
263
|
+
export interface PathItemContent extends Extensions {
|
|
264
|
+
/** 概述,对路径下所有接口生效 */
|
|
265
|
+
summary?: string;
|
|
266
|
+
/** 详细描述,对路径下所有接口生效(CommonMark) */
|
|
267
|
+
description?: string;
|
|
268
|
+
get?: Operation;
|
|
269
|
+
put?: Operation;
|
|
270
|
+
post?: Operation;
|
|
271
|
+
delete?: Operation;
|
|
272
|
+
options?: Operation;
|
|
273
|
+
head?: Operation;
|
|
274
|
+
patch?: Operation;
|
|
275
|
+
trace?: Operation;
|
|
276
|
+
/** 服务器列表(覆盖全局的 servers 定义) */
|
|
277
|
+
servers?: Server[];
|
|
278
|
+
/** 路径下接口公共的参数(各接口可覆盖此定义) */
|
|
279
|
+
parameters?: (Parameter | Reference)[];
|
|
280
|
+
}
|
|
281
|
+
export type LowerMethod = 'get' | 'put' | 'post' | 'delete' | 'options' | 'head' | 'patch' | 'trace';
|
|
282
|
+
export type Method = LowerMethod | Uppercase<LowerMethod>;
|
|
283
|
+
/** 接口定义 */
|
|
284
|
+
export interface Operation {
|
|
285
|
+
/** 接口分组 */
|
|
286
|
+
tags?: string[];
|
|
287
|
+
/** 接口概述 */
|
|
288
|
+
summary?: string;
|
|
289
|
+
/** 详细介绍(CommonMark) */
|
|
290
|
+
description?: string;
|
|
291
|
+
/** 外部文档 */
|
|
292
|
+
externalDocs?: ExternalDocumentation;
|
|
293
|
+
/**
|
|
294
|
+
* 接口 ID,需全局唯一。
|
|
295
|
+
* 可被 Link 定义引用,也可能在其他地方作为接口的唯一标识被使用
|
|
296
|
+
*/
|
|
297
|
+
operationId?: string;
|
|
298
|
+
/** 请求参数列表 */
|
|
299
|
+
parameters?: (Parameter | Reference)[];
|
|
300
|
+
/** 请求体 */
|
|
301
|
+
requestBody?: RequestBody | Reference;
|
|
302
|
+
/** 响应内容 */
|
|
303
|
+
responses?: Responses;
|
|
304
|
+
/** 此接口的回调列表。回调 id 须全局唯一。 */
|
|
305
|
+
callbacks?: {
|
|
306
|
+
[id: string]: Callback | Reference;
|
|
307
|
+
};
|
|
308
|
+
/** 接口是否已废弃 */
|
|
309
|
+
deprecated?: boolean;
|
|
310
|
+
/** 此接口的安全要求,代替全局定义的安全要求 */
|
|
311
|
+
security?: SecurityRequirement[];
|
|
312
|
+
/** 可访问此接口的服务器网址列表,代替全局定义的列表 */
|
|
313
|
+
servers?: Server[];
|
|
314
|
+
}
|
|
315
|
+
/** 外部文档定义 */
|
|
316
|
+
export interface ExternalDocumentation {
|
|
317
|
+
/** 文档介绍(CommonMark) */
|
|
318
|
+
description?: string;
|
|
319
|
+
/** 文档网址 */
|
|
320
|
+
url: string;
|
|
321
|
+
}
|
|
322
|
+
/** 请求参数 */
|
|
323
|
+
export type Parameter = StandardParameter | CustomizeParameter;
|
|
324
|
+
/** 请求参数基本字段 */
|
|
325
|
+
export interface BaseParameter extends Extensions {
|
|
326
|
+
/** 参数名 */
|
|
327
|
+
name: string;
|
|
328
|
+
/** 参数位置 */
|
|
329
|
+
in: ParameterLocation;
|
|
330
|
+
/** 详细描述(CommonMark) */
|
|
331
|
+
description?: string;
|
|
332
|
+
/** 是否必须,in=path 时必须为 true,其他情况默认为 false */
|
|
333
|
+
required?: boolean;
|
|
334
|
+
/** 是否已废弃 */
|
|
335
|
+
deprecated?: boolean;
|
|
336
|
+
/**
|
|
337
|
+
* 是否允许传空值,仅 in=query 时有效,默认为 false。
|
|
338
|
+
* 此属性不建议使用,以后可能会被移除。
|
|
339
|
+
*/
|
|
340
|
+
allowEmptyValue?: boolean;
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* 简单场景的参数:采用预设的参数序列化方式。
|
|
344
|
+
* style 指定序列化方式、schema 定义数据内容。
|
|
345
|
+
* */
|
|
346
|
+
export interface StandardParameter extends BaseParameter {
|
|
347
|
+
/**
|
|
348
|
+
* 参数序列化方式。
|
|
349
|
+
* 通常使用默认值即可:path => simple, query => form, header => simple, cookie => form。
|
|
350
|
+
* 详见顶部对“参数序列化”的说明。
|
|
351
|
+
*/
|
|
352
|
+
style?: ParameterStyle;
|
|
353
|
+
/**
|
|
354
|
+
* 参数值是 array 或 object 时,是否应拆分传递。
|
|
355
|
+
* style=form 时默认为 true,其他情况默认为 false。
|
|
356
|
+
*/
|
|
357
|
+
explode?: boolean;
|
|
358
|
+
/**
|
|
359
|
+
* 是否允许出现没被转义的保留字符(:/?#[]@!$&'()*+,;=)。
|
|
360
|
+
* 仅 in=query 时有效,默认为 false。
|
|
361
|
+
*/
|
|
362
|
+
allowReserved?: boolean;
|
|
363
|
+
/** 数据规范 */
|
|
364
|
+
schema?: Schema | Reference;
|
|
365
|
+
/** 范例值,不能与 examples 同时存在 */
|
|
366
|
+
example?: unknown;
|
|
367
|
+
/** 一系列范例值,不能与 example 同时存在 */
|
|
368
|
+
examples?: {
|
|
369
|
+
[exampleName: string]: Example | Reference;
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* 复杂场景的参数:用指定 MIME Type 的格式序列化参数。
|
|
374
|
+
* 例如可以指定 query 中的一个值是 JSON 字符串:
|
|
375
|
+
* {
|
|
376
|
+
* name: 'book',
|
|
377
|
+
* in: 'query',
|
|
378
|
+
* content: {
|
|
379
|
+
* 'application/json': {
|
|
380
|
+
* schema: {...},
|
|
381
|
+
* example: '{"name": "史记","author":"司马迁"}'
|
|
382
|
+
* }
|
|
383
|
+
* }
|
|
384
|
+
* }
|
|
385
|
+
* 然后就可以这样发起请求:
|
|
386
|
+
* GET /book/buy?people=1&book={"name": "史记","author":"司马迁"}
|
|
387
|
+
*/
|
|
388
|
+
export interface CustomizeParameter extends BaseParameter {
|
|
389
|
+
/**
|
|
390
|
+
* 定义序列化方式(MIME Type)和数据内容。
|
|
391
|
+
* 此对象中只能有一个键值对,即一个参数只能有一种序列化方式。
|
|
392
|
+
*/
|
|
393
|
+
content?: {
|
|
394
|
+
[MIMEType: string]: MediaType;
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
/** 参数位置 */
|
|
398
|
+
export type ParameterLocation = 'query' | 'header' | 'path' | 'cookie';
|
|
399
|
+
/** 预设的参数序列化方式(详见顶部说明) */
|
|
400
|
+
export type ParameterStyle = 'matrix' | 'label' | 'form' | 'simple' | 'spaceDelimited' | 'pipeDelimited' | 'deepObject';
|
|
401
|
+
/** 请求体 */
|
|
402
|
+
export interface RequestBody extends Extensions {
|
|
403
|
+
/** 详细介绍(CommonMark) */
|
|
404
|
+
description?: string;
|
|
405
|
+
/**
|
|
406
|
+
* 不同 MIME Type 下的内容格式。
|
|
407
|
+
* 例如一个接口支持接收 JSON 或 HTML 表单形式的 body。
|
|
408
|
+
* 那么就要定义这样的 content:{ 'application/json': xxx, 'application/x-www-form-urlencoded': xxx }
|
|
409
|
+
*/
|
|
410
|
+
content: {
|
|
411
|
+
[MIMEType: string]: MediaType;
|
|
412
|
+
};
|
|
413
|
+
/** 请求体是否必须 */
|
|
414
|
+
required?: boolean;
|
|
415
|
+
}
|
|
416
|
+
/** 以特定 MIME Type 传递的内容的 Schema 和范例 */
|
|
417
|
+
export interface MediaType extends Extensions {
|
|
418
|
+
/** 数据规范 */
|
|
419
|
+
schema?: Schema;
|
|
420
|
+
/** 范例值,不能与 examples 同时存在 */
|
|
421
|
+
example?: unknown;
|
|
422
|
+
/** 一系列范例值,不能与 example 同时存在 */
|
|
423
|
+
examples?: {
|
|
424
|
+
[exampleName: string]: Example | Reference;
|
|
425
|
+
};
|
|
426
|
+
/**
|
|
427
|
+
* 为 schema 中的各对象字段补充编码信息。
|
|
428
|
+
* - 仅在 MediaType 出现在 RequestBody 中,且 MIME type 为 `multipart/*` 或 `application/x-www-form-urlencoded` 时有意义。
|
|
429
|
+
* - 在这种情况下,根据 HTTP 协议,body 内容明确地由一个个参数构成,每个参数可以有自己的序列化方式,
|
|
430
|
+
* 且和 Parameter 类似,支持使用预设的序列化方式或自定 MIME Type 来序列化。
|
|
431
|
+
* - 可以理解为 body 的 MIME type 是这两种时,可以通过 encoding 字段在 body 中定义 Parameter。
|
|
432
|
+
* 而其他情况下,body 只能整体定义,总体只拥有一种 MIME Type,不能给其下每个字段单独定义序列化方式。
|
|
433
|
+
*/
|
|
434
|
+
encoding?: {
|
|
435
|
+
[schemaProperty: string]: Encoding;
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* 定义 RequestBody 中单个字段值的编码信息。
|
|
440
|
+
* 详见 MediaType['encoding] 中的说明。
|
|
441
|
+
*/
|
|
442
|
+
export type Encoding = StandardEncoding | CustomizeEncoding;
|
|
443
|
+
/**
|
|
444
|
+
* 采用预定序列化方式的 encoding 信息(类似 StandardParameter)。
|
|
445
|
+
* 仅在 RequestBody 的 MIME Type 为 `multipart/form-data` 或 `application/x-www-form-urlencoded` 时有效(就是说不支持 `multipart/*` 的其他形式)。
|
|
446
|
+
*/
|
|
447
|
+
export interface StandardEncoding {
|
|
448
|
+
/**
|
|
449
|
+
* 定义通过 HTTP Header 为此字段提供的额外信息,如 `Content-Disposition`。
|
|
450
|
+
* 仅当 MediaType 的 MIME Type 是 `multipart/*` 时有效。
|
|
451
|
+
* (`Content-Type` 值已通过 MediaType 的 key 指定,无需再定义在这里)
|
|
452
|
+
*/
|
|
453
|
+
headers?: Record<string, Header | Reference>;
|
|
454
|
+
/**
|
|
455
|
+
* 指定此字段的序列化方式。
|
|
456
|
+
* body 里不像 Parameter 有 `in` 的概念,不过所有规则与 `in=query` 的参数相同,包括默认值。
|
|
457
|
+
*/
|
|
458
|
+
style?: ParameterStyle;
|
|
459
|
+
/**
|
|
460
|
+
* 字段值是 array 或 object 时是否要拆分开传递。
|
|
461
|
+
* style=form 时默认为 true,其他情况默认为 false。
|
|
462
|
+
*/
|
|
463
|
+
explode?: boolean;
|
|
464
|
+
/** 是否允许出现没被转义的保留字符(:/?#[]@!$&'()*+,;=),默认为 false */
|
|
465
|
+
allowReserved?: boolean;
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* 用指定 MIME Type 的格式序列化的 encoding 信息(类似 CustomizeParameter)
|
|
469
|
+
*/
|
|
470
|
+
export interface CustomizeEncoding {
|
|
471
|
+
/**
|
|
472
|
+
* 指定 body 中的目标字段使用哪种 MIME Type 来序列化。
|
|
473
|
+
* 默认值根据此字段的数据类型决定:
|
|
474
|
+
* - object -> application/json
|
|
475
|
+
* - array -> 根据数组元素的类型决定
|
|
476
|
+
* - 其他 -> application/octet-stream
|
|
477
|
+
*/
|
|
478
|
+
contentType: string;
|
|
479
|
+
headers: StandardEncoding['headers'];
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* 定义接口可能返回的 HTTP Status 及对应的响应内容。
|
|
483
|
+
* - 必须定义至少一种 status,且只有一种 status 时,必须代表接口成功时的响应。
|
|
484
|
+
* - `default` 用来定义 `明确定义了的 status` 之外的情况(就是说不能只有 default,应该至少另有一种代表成功的 status 定义)。
|
|
485
|
+
* - status 支持通配符:1xx 2xx 3xx 4xx 5xx;不过精确指定的 status(如 404)优先级高于通配符。
|
|
486
|
+
*/
|
|
487
|
+
export interface Responses extends LooseExtensions {
|
|
488
|
+
default?: Response | Reference;
|
|
489
|
+
[HTTPStatus: string]: Response | Reference | undefined;
|
|
490
|
+
}
|
|
491
|
+
/** 定义接口响应 */
|
|
492
|
+
export interface Response extends Extensions {
|
|
493
|
+
/** 详细描述(CommonMark) */
|
|
494
|
+
description?: string;
|
|
495
|
+
/**
|
|
496
|
+
* 响应 headers。
|
|
497
|
+
* 注意:`Content-Type` 通过 `content` 指定,不在这里定义。
|
|
498
|
+
*/
|
|
499
|
+
headers?: Record<string, Header | Reference>;
|
|
500
|
+
/**
|
|
501
|
+
* 定义可能的响应内容 MIME Type,及对应的内容格式。
|
|
502
|
+
* 例如一个接口支持返回 JSON 内容,也支持返回 XML(请求时可通过 `Accept` Header 或其他方式指定)。
|
|
503
|
+
*/
|
|
504
|
+
content?: {
|
|
505
|
+
[MIMEType: string]: MediaType;
|
|
506
|
+
};
|
|
507
|
+
/** 列出与此响应内容关联的其他接口(例如返回内容里的 id 字段是另一个接口需要的传参) */
|
|
508
|
+
links?: {
|
|
509
|
+
[linkName: string]: Link | Reference;
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* 定义接口回调(接口被调用后,反过来请求“请求发起者”的网址)。
|
|
514
|
+
* 通过 `expression` 计算出要调用的网址。
|
|
515
|
+
*/
|
|
516
|
+
export interface Callback extends LooseExtensions {
|
|
517
|
+
[expression: string]: PathItem;
|
|
518
|
+
}
|
|
519
|
+
/** 定义范例值 */
|
|
520
|
+
export interface Example extends Extensions {
|
|
521
|
+
/** 概述 */
|
|
522
|
+
summary?: string;
|
|
523
|
+
/** 详细描述(CommonMark) */
|
|
524
|
+
description?: string;
|
|
525
|
+
/** 范例值内容。不能和 externalValue 同时使用 */
|
|
526
|
+
value?: unknown;
|
|
527
|
+
/** 定义了范例值的网址。不能和 value 同时使用 */
|
|
528
|
+
externalValue?: string;
|
|
529
|
+
}
|
|
530
|
+
/** 定义“接口关联” */
|
|
531
|
+
export interface Link extends Extensions {
|
|
532
|
+
/**
|
|
533
|
+
* 指向目标接口(Operation)的绝对或相对路径(URI)。
|
|
534
|
+
* 对“相对路径”的计算方式见:<https://swagger.io/specification/#relative-references-in-uris>。
|
|
535
|
+
* 此字段不能与 operationId 一起使用。
|
|
536
|
+
*/
|
|
537
|
+
operationRef?: string;
|
|
538
|
+
/**
|
|
539
|
+
* 目标接口的 operationId。
|
|
540
|
+
* 不能与 operationRef 一起使用。
|
|
541
|
+
*/
|
|
542
|
+
operationId?: string;
|
|
543
|
+
/**
|
|
544
|
+
* 当前接口中可作为关联接口的参数的内容。
|
|
545
|
+
* - name: 在关联接口处的参数名。可通过 `path.id` 这样的形式指定参数位置(in)
|
|
546
|
+
* - value: 根据当前接口信息生成的参数值。可以是“常量”或“可计算的表达式(Runtime Expression)”
|
|
547
|
+
*/
|
|
548
|
+
parameters?: {
|
|
549
|
+
[name: string]: unknown;
|
|
550
|
+
};
|
|
551
|
+
/**
|
|
552
|
+
* 当前接口中可作为关联接口的 requestBody 的内容。
|
|
553
|
+
* 值可以是“常量”或“可计算的表达式(Runtime Expression)”。
|
|
554
|
+
*/
|
|
555
|
+
requestBody?: unknown;
|
|
556
|
+
/** 对接口关系的详细描述(CommonMark) */
|
|
557
|
+
description?: string;
|
|
558
|
+
/** 供关联接口使用的服务器信息 */
|
|
559
|
+
server?: Server;
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* 定义 Header 值的格式
|
|
563
|
+
* 形式和 Parameter 相同,不过不能指定 name 和 in(name 通过 headers[name] 指定;in 固定是 'header)
|
|
564
|
+
*/
|
|
565
|
+
export type Header = Omit<Parameter, 'name' | 'in'>;
|
|
566
|
+
/**
|
|
567
|
+
* 定义接口标签(接口分组)的具体信息
|
|
568
|
+
*/
|
|
569
|
+
export interface Tag extends Extensions {
|
|
570
|
+
/** 标签(分组)名 */
|
|
571
|
+
name: string;
|
|
572
|
+
/** 详细描述(CommonMark) */
|
|
573
|
+
description?: string;
|
|
574
|
+
/** 相关外部文档 */
|
|
575
|
+
externalDocs?: ExternalDocumentation;
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* 引用
|
|
579
|
+
* 引用当前文档或外部 OpenAPI 文档中的某段定义。
|
|
580
|
+
*/
|
|
581
|
+
export interface Reference {
|
|
582
|
+
/** 引用对象的 URI */
|
|
583
|
+
$ref: string;
|
|
584
|
+
/**
|
|
585
|
+
* 对引用对象的概述,会覆盖引用对象对自己的概述。
|
|
586
|
+
* 如果引用对象本身不支持设置概述,则此字段无效。
|
|
587
|
+
*/
|
|
588
|
+
summary?: string;
|
|
589
|
+
/**
|
|
590
|
+
* 对引用对象的详细介绍(CommonMark),会覆盖引用对象自己的详细介绍。
|
|
591
|
+
* 如果引用独享不支持设置详细介绍,则此字段无效。
|
|
592
|
+
*/
|
|
593
|
+
description?: string;
|
|
594
|
+
}
|
|
595
|
+
/**
|
|
596
|
+
* 定义“数据规范”。
|
|
597
|
+
*
|
|
598
|
+
* 由三部分组成:
|
|
599
|
+
* - 数据格式,包括数据类型(Data Type)和对象字段结构等信息。
|
|
600
|
+
* - 验证规则,如字符串长度要小于 16。
|
|
601
|
+
* - 辅助说明,如 externalDocs 等字段。
|
|
602
|
+
*
|
|
603
|
+
* 定义内容继承自 JSON Schema 规范,部分字段针对 OpenAPI 的情况做了调整。
|
|
604
|
+
* 数据格式 - JSON Schema Core 规范:<https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-00>
|
|
605
|
+
* 验证规则 - JSON Schema Validation 规范:<https://datatracker.ietf.org/doc/html/draft-wright-json-schema-validation-00>
|
|
606
|
+
*/
|
|
607
|
+
export interface Schema extends Extensions {
|
|
608
|
+
/**
|
|
609
|
+
* 指定“多态鉴别”信息
|
|
610
|
+
* 即快速判断把 allOf / anyOf / oneOf 指定的多个 schema 中的哪个作为当前要使用的 schema。
|
|
611
|
+
* 详见:<https://swagger.io/specification/#composition-and-inheritance-polymorphism>
|
|
612
|
+
*/
|
|
613
|
+
discriminator?: Discriminator;
|
|
614
|
+
/**
|
|
615
|
+
* 仅在“子 Schema”中有效,在“根 Schema”中无意义,
|
|
616
|
+
* 用来给“子 Schema”对应的字段指定额外的 XML 表现形式信息。
|
|
617
|
+
*/
|
|
618
|
+
xml?: XML;
|
|
619
|
+
/** 此 Schema 的外部文档 */
|
|
620
|
+
externalDocs?: ExternalDocumentation;
|
|
621
|
+
/** 内容范例(此字段已废弃) */
|
|
622
|
+
example?: unknown;
|
|
623
|
+
/**
|
|
624
|
+
* 指定当前定义遵循的 JSON Schema 变种(dialect)
|
|
625
|
+
* 详见:<https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-00#section-8.1.1>
|
|
626
|
+
*/
|
|
627
|
+
$schema?: string;
|
|
628
|
+
/** 要求数据符合数组里的“所有”规范 */
|
|
629
|
+
allOf?: (Schema | Reference)[];
|
|
630
|
+
/** 要求数据符合数组里的“一个或多个”规范 */
|
|
631
|
+
anyOf?: (Schema | Reference)[];
|
|
632
|
+
/** 要求数据符合且只符合数组里的“一个”规范 */
|
|
633
|
+
oneOf?: (Schema | Reference)[];
|
|
634
|
+
/** 要求数据必须“不符合”此规范 */
|
|
635
|
+
not?: Schema | Reference;
|
|
636
|
+
/** 如果数据符合 `if` 定义的规范,则要求其也符合 `then` 定义的规范,否则要求其符合 `else` 定义的规范 */
|
|
637
|
+
if?: Schema | Reference;
|
|
638
|
+
/** 数据符合 `if` 定义的规范时,也要符合此规范 */
|
|
639
|
+
then?: Schema | Reference;
|
|
640
|
+
/** 数据不符合 `if` 定义的规范时,则要符合此规范 */
|
|
641
|
+
else?: Schema | Reference;
|
|
642
|
+
/** [type=array] 数组前几个元素的规范(其余元素根据 items 的定义来验证) */
|
|
643
|
+
prefixItems?: (Schema | Reference)[];
|
|
644
|
+
/** [type=array] prefixItems 之外每个元素的规范 */
|
|
645
|
+
items?: Schema | Reference;
|
|
646
|
+
/** [type=array] 要求数组里至少有一个元素符合此规范 */
|
|
647
|
+
contains?: Schema | Reference;
|
|
648
|
+
/** [type=object] 对象各字段的规范 */
|
|
649
|
+
properties?: {
|
|
650
|
+
[name: string]: Schema | Reference;
|
|
651
|
+
};
|
|
652
|
+
/** [type=object] 要求名称与某个 regexp 匹配的字段,值也必须符合对应的 Schema 规范 */
|
|
653
|
+
patternProperties?: {
|
|
654
|
+
[regexp: string]: Schema | Reference;
|
|
655
|
+
};
|
|
656
|
+
/** [type=object] 指定没被 properties 和 patternProperties 匹配到的字段的规范。 */
|
|
657
|
+
additionalProperties?: Schema | Reference;
|
|
658
|
+
/** [type=object] 要求对象的每个字段名作为字符串都符合此规范 */
|
|
659
|
+
propertyNames?: Schema | Reference;
|
|
660
|
+
/** [type=number] 大于 0 且是此值的倍数 */
|
|
661
|
+
multipleOf?: number;
|
|
662
|
+
/** [type=number] “小于等于”此值,如果 exclusiveMaximum 为 true 则是“小于”此值 */
|
|
663
|
+
maximum?: number;
|
|
664
|
+
/** [type=number] 控制 maximum 的匹配方式 @defaults false */
|
|
665
|
+
exclusiveMaximum?: boolean;
|
|
666
|
+
/** [type=number] “大于等于”此值,如果 exclusiveMinimum 为 true 则是“大于”此值 */
|
|
667
|
+
minimum?: number;
|
|
668
|
+
/** [type=number] 控制 minimum 的匹配方式 @defaults false */
|
|
669
|
+
exclusiveMinimum?: boolean;
|
|
670
|
+
/** [type=string] 字符串最大长度 */
|
|
671
|
+
maxLength?: number;
|
|
672
|
+
/** [type=string] 字符串最小长度 */
|
|
673
|
+
minLength?: number;
|
|
674
|
+
/** [type=string] 字符串匹配此正则表达式 */
|
|
675
|
+
pattern?: string;
|
|
676
|
+
/** [type=array] 数组最大长度 */
|
|
677
|
+
maxItems?: number;
|
|
678
|
+
/** [type=array] 数组最小长度 */
|
|
679
|
+
minItems?: number;
|
|
680
|
+
/** [type=array] 要求数组里没有重复值 @defaults false */
|
|
681
|
+
uniqueItems?: boolean;
|
|
682
|
+
/** [type=object] 对象最大字段数 */
|
|
683
|
+
maxProperties?: number;
|
|
684
|
+
/** [type=object] 对象最大字段数 */
|
|
685
|
+
minProperties?: string;
|
|
686
|
+
/** [type=object] 对象必须有的字段 */
|
|
687
|
+
required?: string[];
|
|
688
|
+
/** 要求数据只能是这里出现了的值 */
|
|
689
|
+
enum?: unknown[];
|
|
690
|
+
/** 指定数据类型 */
|
|
691
|
+
type?: DataType | DataType[];
|
|
692
|
+
/** 数据标题 */
|
|
693
|
+
title?: string;
|
|
694
|
+
/** 数据详细描述(CommonMark) */
|
|
695
|
+
description?: string;
|
|
696
|
+
/** 默认值 */
|
|
697
|
+
default?: unknown;
|
|
698
|
+
/** 字段值语义格式(如 email) */
|
|
699
|
+
format?: string;
|
|
700
|
+
$vocabulary?: string;
|
|
701
|
+
$id?: string;
|
|
702
|
+
$anchor?: string;
|
|
703
|
+
$dynamicAnchor?: string;
|
|
704
|
+
$dynamicRef?: string;
|
|
705
|
+
$defs?: {
|
|
706
|
+
[id: string]: Schema;
|
|
707
|
+
};
|
|
708
|
+
$comment?: string;
|
|
709
|
+
dependentSchemas?: {
|
|
710
|
+
[propertyName: string]: Schema | Reference;
|
|
711
|
+
};
|
|
712
|
+
unevaluatedItems?: Schema;
|
|
713
|
+
unevaluatedProperties?: Schema;
|
|
714
|
+
dependencies?: {
|
|
715
|
+
[name: string]: Schema | Schema[] | Reference | Reference[];
|
|
716
|
+
};
|
|
717
|
+
}
|
|
718
|
+
/** 数据类型 */
|
|
719
|
+
export type DataType = 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object' | 'null';
|
|
720
|
+
/**
|
|
721
|
+
* “多态鉴别”信息
|
|
722
|
+
* 即快速判断把 allOf / anyOf / oneOf 指定的多个 schema 中的哪个作为当前要使用的 schema。
|
|
723
|
+
* 详见:<https://swagger.io/specification/#composition-and-inheritance-polymorphism>
|
|
724
|
+
*/
|
|
725
|
+
export interface Discriminator {
|
|
726
|
+
/** 基于哪个对象字段进行鉴别 */
|
|
727
|
+
propertyName?: string;
|
|
728
|
+
/** 字段值与 Schema name / Reference 的映射关系 */
|
|
729
|
+
mapping?: Record<string, string>;
|
|
730
|
+
}
|
|
731
|
+
/**
|
|
732
|
+
* 用来提供额外的 XML 表现形式信息。
|
|
733
|
+
* 详见:<https://swagger.io/specification/#xml-object>
|
|
734
|
+
*/
|
|
735
|
+
export interface XML extends Extensions {
|
|
736
|
+
name?: string;
|
|
737
|
+
namespace?: string;
|
|
738
|
+
prefix?: string;
|
|
739
|
+
attribute?: boolean;
|
|
740
|
+
wrapped?: boolean;
|
|
741
|
+
}
|
|
742
|
+
/**
|
|
743
|
+
* 定义一种认证方案:基于 OAuth 等标准制定的具体执行方案
|
|
744
|
+
*/
|
|
745
|
+
export interface SecurityScheme extends Extensions {
|
|
746
|
+
/** 方案类型(即此方案基于哪种标准) */
|
|
747
|
+
type: SecuritySchemeType;
|
|
748
|
+
/** 详细描述(CommonMark) */
|
|
749
|
+
description?: string;
|
|
750
|
+
/** [type=apiKey] 使用到的 header / query / cookie 参数名 */
|
|
751
|
+
name: string;
|
|
752
|
+
/** [type=apiKey] 使用来自哪里的参数 */
|
|
753
|
+
in: 'query' | 'header' | 'cookie';
|
|
754
|
+
/** [type=http] 基于哪种 HTTP Authorization scheme */
|
|
755
|
+
schema: string;
|
|
756
|
+
/** [type=http-bearer] 告知客户端 bearer token 的格式化方式 */
|
|
757
|
+
bearerFormat?: string;
|
|
758
|
+
/** [type=oauth2] 定义支持的 OAuth flow */
|
|
759
|
+
flows: OAuthFlows;
|
|
760
|
+
/** [type=openIdConnect] 用于获取 OAuth2 配置值的 OpenId Connect URL */
|
|
761
|
+
openIdConnectUrl: string;
|
|
762
|
+
}
|
|
763
|
+
/** 认证方案类型 */
|
|
764
|
+
export type SecuritySchemeType = 'apiKey' | 'http' | 'mutualTLS' | 'oauth2' | 'openIdConnect';
|
|
765
|
+
/** 定义各类支持的 OAuth Flows */
|
|
766
|
+
export interface OAuthFlows extends Extensions {
|
|
767
|
+
implicit?: OAuthFlow;
|
|
768
|
+
password?: OAuthFlow;
|
|
769
|
+
clientCredentials?: OAuthFlow;
|
|
770
|
+
authorizationCode?: OAuthFlow;
|
|
771
|
+
}
|
|
772
|
+
/**
|
|
773
|
+
* OAuth Flow 详细配置
|
|
774
|
+
* 详见:https://swagger.io/specification/#oauth-flow-object
|
|
775
|
+
*/
|
|
776
|
+
export interface OAuthFlow extends Extensions {
|
|
777
|
+
authorizationUrl: string;
|
|
778
|
+
tokenUrl: string;
|
|
779
|
+
refreshUrl?: string;
|
|
780
|
+
scopes: Record<string, string>;
|
|
781
|
+
}
|
|
782
|
+
/**
|
|
783
|
+
* 定义认证要求
|
|
784
|
+
* name 必须是 components.securitySchemes 中定义了的认证方案。
|
|
785
|
+
* value 是方案的配置参数
|
|
786
|
+
*/
|
|
787
|
+
export interface SecurityRequirement {
|
|
788
|
+
[name: string]: string;
|
|
789
|
+
}
|
|
790
|
+
/**
|
|
791
|
+
* 在规范定义之外,补充额外内容
|
|
792
|
+
* 扩展的 key 需以 'x-' 开头,例如 x-token
|
|
793
|
+
*/
|
|
794
|
+
export interface Extensions {
|
|
795
|
+
[key: `x-${string}`]: unknown;
|
|
796
|
+
}
|
|
797
|
+
/**
|
|
798
|
+
* 因 TypeScript 限制,部分类型无法继承 Extensions,此时可改为继承此类型
|
|
799
|
+
* 但还是应遵守和 Extensions 一样的规范
|
|
800
|
+
*/
|
|
801
|
+
export interface LooseExtensions {
|
|
802
|
+
}
|