1
- ### 介绍
1
+ ## 介绍
2
2
3
- [ OpenAPI] ( https://swagger.io/specification/ ) 规范是一种与语言无关的定义格式,用于描述 RESTful API。Nest 提供了一个专用[ 模块] ( https://github.com/nestjs/swagger ) ,可通过装饰器生成此类规范。
3
+ [ OpenAPI] ( https://swagger.io/specification/ ) 规范是一种与语言无关的定义格式,用于描述 RESTful API。Nest 提供了一个专用[ 模块] ( https://github.com/nestjs/swagger ) ,可通过装饰器生成此类规范。
4
4
5
5
#### 安装
6
6
10
10
$ npm install --save @nestjs/swagger
11
11
```
12
12
13
- #### 启动引导
13
+ #### 引导程序
14
14
15
15
安装过程完成后,打开 ` main.ts ` 文件并使用 ` SwaggerModule ` 类初始化 Swagger:
16
16
17
- ``` typescript title="main"
17
+ ``` typescript title="main.ts "
18
18
import { NestFactory } from ' @nestjs/core' ;
19
19
import { SwaggerModule , DocumentBuilder } from ' @nestjs/swagger' ;
20
20
import { AppModule } from ' ./app.module' ;
@@ -36,30 +36,30 @@ async function bootstrap() {
36
36
bootstrap ();
37
37
```
38
38
39
- > info ** 提示** 工厂方法 ` SwaggerModule.createDocument() ` 专门用于在请求时生成 Swagger 文档。这种方法有助于节省初始化时间,生成的文档是一个符合 [ OpenAPI 文档] ( https://swagger.io/specification/#openapi-document ) 规范的可序列化对象。除了通过 HTTP 提供文档外,您还可以将其保存为 JSON 或 YAML 文件以多种方式使用。
39
+ > ** 提示** 工厂方法 ` SwaggerModule.createDocument() ` 专门用于在请求时生成 Swagger 文档。这种方法有助于节省初始化时间,生成的文档是一个符合 [ OpenAPI 文档] ( https://swagger.io/specification/#openapi-document ) 规范的可序列化对象。除了通过 HTTP 提供文档外,您还可以将其保存为 JSON 或 YAML 文件以多种方式使用。
40
40
41
- ` DocumentBuilder ` 用于构建符合 OpenAPI 规范的基础文档结构。它提供了多种方法用于设置标题、描述、版本等属性。要创建完整文档(包含所有已定义的 HTTP 路由),我们使用 ` SwaggerModule ` 类的 ` createDocument() ` 方法。该方法接收两个参数:应用实例和 Swagger 配置对象。此外,我们还可以提供第三个参数,其类型应为 ` SwaggerDocumentOptions ` 。更多细节请参阅[ 文档配置章节 ] ( /openapi/introduction #文档选项) 。
41
+ ` DocumentBuilder ` 用于构建符合 OpenAPI 规范的基础文档结构。它提供了多种方法用于设置标题、描述、版本等属性。要创建完整文档(包含所有已定义的 HTTP 路由),我们使用 ` SwaggerModule ` 类的 ` createDocument() ` 方法。该方法接收两个参数:应用实例和 Swagger 配置对象。此外,我们还可以提供第三个参数,其类型应为 ` SwaggerDocumentOptions ` 。更多细节请参阅[ 文档选项章节 ] ( #文档选项 ) 。
42
42
43
43
创建文档后,我们可以调用 ` setup() ` 方法。该方法接收:
44
44
45
- 1 . 挂载 Swagger UI 的路径
46
- 2 . 应用实例
47
- 3 . 上面实例化的文档对象
48
- 4 . 可选配置参数(了解更多[ 请点击此处] ( /openapi/introduction #设置选项) )
45
+ 1 . 挂载 Swagger UI 的路径
46
+ 2 . 应用实例
47
+ 3 . 上面实例化的文档对象
48
+ 4 . 可选配置参数(了解更多[ 请点击此处] ( #设置选项 ) )
49
49
50
50
现在可以运行以下命令启动 HTTP 服务器:
51
51
52
52
``` bash
53
53
$ npm run start
54
54
```
55
55
56
- 当应用程序运行时,在浏览器中访问 ` http://localhost:3000/api ` ,您将看到 Swagger 用户界面 。
56
+ 当应用程序运行时,在浏览器中访问 ` http://localhost:3000/api ` ,您将看到 Swagger UI 。
57
57
58
- ![ ] ( /assets/swagger1.png )
58
+ < figure >< img src = " /assets/swagger1.png " /></ figure >
59
59
60
- 如你所见,` SwaggerModule ` 会自动映射所有端点 。
60
+ 如你所见,` SwaggerModule ` 会自动反映所有端点 。
61
61
62
- > info ** 提示** 要生成并下载 Swagger JSON 文件,请访问 ` http://localhost:3000/api-json ` (假设你的 Swagger 文档位于 ` http://localhost:3000/api ` )。你也可以仅通过 ` @nestjs/swagger ` 中的 setup 方法将其暴露在你选择的路由上,如下所示:
62
+ > ** 提示** 要生成并下载 Swagger JSON 文件,请访问 ` http://localhost:3000/api-json ` (假设你的 Swagger 文档位于 ` http://localhost:3000/api ` )。你也可以仅通过 ` @nestjs/swagger ` 中的 setup 方法将其暴露在你选择的路由上,如下所示:
63
63
>
64
64
> ``` typescript
65
65
> SwaggerModule .setup (' swagger' , app , documentFactory , {
@@ -68,9 +68,8 @@ $ npm run start
68
68
> ` ` `
69
69
>
70
70
> 这将在 ` http :// localhost:3000/swagger/json` 上暴露它
71
- ```
72
71
73
- > warning ** 警告** 当使用 ` fastify ` 和 ` helmet ` 时,可能会出现 [ CSP] ( https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP ) 问题,要解决此冲突,请按如下方式配置 CSP:
72
+ > ** 警告** 当使用 ` fastify ` 和 ` helmet ` 时,可能会出现 [CSP ](https :// developer.mozilla.org/en-US/docs/Web/HTTP/CSP) 问题,要解决此冲突,请按如下方式配置 CSP:
74
73
>
75
74
> ` ` ` typescript
76
75
> app.register(helmet, {
@@ -89,13 +88,12 @@ $ npm run start
89
88
> contentSecurityPolicy: false,
90
89
> });
91
90
> ` ` `
92
- ` ` `
93
91
94
92
#### 文档选项
95
93
96
94
创建文档时,可以提供一些额外选项来微调库的行为。这些选项应为 ` SwaggerDocumentOptions ` 类型,具体如下:
97
95
98
- ` ` ` TypeScript
96
+ ` ` ` typescript
99
97
export interface SwaggerDocumentOptions {
100
98
/**
101
99
* List of modules to include in the specification
@@ -150,7 +148,7 @@ export interface SwaggerDocumentOptions {
150
148
151
149
例如,若需确保库生成类似 ` createUser ` 而非 ` UsersController_createUser ` 的操作名称,可进行如下设置:
152
150
153
- ` ` ` TypeScript
151
+ ` ` ` typescript
154
152
const options: SwaggerDocumentOptions = {
155
153
operationIdFactory: (
156
154
controllerKey: string,
@@ -160,16 +158,16 @@ const options: SwaggerDocumentOptions = {
160
158
const documentFactory = () => SwaggerModule.createDocument(app, config, options);
161
159
` ` `
162
160
163
- #### 配置选项
161
+ #### 设置选项
164
162
165
- 您可以通过将一个符合 ` SwaggerCustomOptions ` 接口的配置对象作为第四个参数传递给 ` SwaggerModule#设置 ` 方法来配置 Swagger UI 。
163
+ 您可以通过将一个符合 ` SwaggerCustomOptions ` 接口的配置对象作为第四个参数传递给 ` SwaggerModule#setup ` 方法来配置 Swagger UI 。
166
164
167
- ` ` ` TypeScript
165
+ ` ` ` typescript
168
166
export interface SwaggerCustomOptions {
169
167
/**
170
168
* If ` true ` , Swagger resources paths will be prefixed by the global prefix set through ` setGlobalPrefix ()` .
171
169
* Default: ` false ` .
172
- * @see .. /faq/global-prefix
170
+ * @see https://docs.nestjs.com /faq/global-prefix
173
171
*/
174
172
useGlobalPrefix?: boolean;
175
173
@@ -287,7 +285,7 @@ export interface SwaggerCustomOptions {
287
285
}
288
286
` ` `
289
287
290
- > ** 提示** ` ui ` 和 ` raw ` 是独立选项。禁用 Swagger UI (` ui: false ` )不会禁用 API 定义(JSON / YAML )。反之,禁用 API 定义(` raw: [] ` )也不会影响 Swagger UI 的使用。
288
+ > ** 提示** ` ui ` 和 ` raw ` 是独立选项。禁用 Swagger UI (` ui: false ` ) 不会禁用 API 定义 (JSON / YAML )。反之,禁用 API 定义 (` raw: [] ` ) 也不会影响 Swagger UI 的使用。
291
289
>
292
290
> 例如,以下配置将禁用 Swagger UI 但仍允许访问 API 定义:
293
291
>
@@ -296,11 +294,10 @@ export interface SwaggerCustomOptions {
296
294
> ui: false, // Swagger UI is disabled
297
295
> raw: ['json'], // JSON API definition is still accessible (YAML is disabled)
298
296
> };
299
- > SwaggerModule.setup('api', app, options);
297
+ > SwaggerModule.setup('api', app, documentFactory, options);
300
298
> ` ` `
301
299
>
302
- > 在这种情况下,[http :// localhost:3000/api-json](http://localhost:3000/api-json) 仍可访问,但 [http://localhost:3000/api](http://localhost:3000/api)(Swagger UI)将不可用。
303
- ` ` `
300
+ > 在这种情况下,` http://localhost:3000/api-json ` 仍可访问,但 ` http://localhost:3000/api ` (Swagger UI )将不可用。
304
301
305
302
#### 示例
306
303
0 commit comments