OpenAPI 规范是一种与语言无关的定义格式,用于描述 RESTful API。Nest 提供了一个专用模块,可通过装饰器生成此类规范。
要开始使用它,我们首先需要安装所需的依赖项。
安装过程完成后,打开 main.ts 文件并使用 SwaggerModule 类初始化 Swagger:
工厂方法 SwaggerModule.createDocument() 专门用于在请求时生成 Swagger 文档。这种方法有助于节省初始化时间,生成的文档是一个符合 OpenAPI 文档规范的可序列化对象。除了通过 HTTP 提供文档外,您还可以将其保存为 JSON 或 YAML 文件以多种方式使用。
DocumentBuilder 用于构建符合 OpenAPI 规范的基础文档结构。它提供了多种方法用于设置标题、描述、版本等属性。要创建完整文档(包含所有已定义的 HTTP 路由),我们使用 SwaggerModule 类的 createDocument() 方法。该方法接收两个参数:应用实例和 Swagger 配置对象。此外,我们还可以提供第三个参数,其类型应为 SwaggerDocumentOptions。更多细节请参阅文档选项章节。
创建文档后,我们可以调用 setup() 方法。该方法接收:
现在可以运行以下命令启动 HTTP 服务器:
当应用程序运行时,在浏览器中访问 http://localhost:3000/api,您将看到 Swagger UI。

如你所见,SwaggerModule 会自动反映所有端点。
要生成并下载 Swagger JSON 文件,请访问 http://localhost:3000/api-json(假设你的 Swagger 文档位于 http://localhost:3000/api)。你也可以仅通过 @nestjs/swagger 中的 setup 方法将其暴露在你选择的路由上,如下所示:
这将在
http://localhost:3000/swagger/json上暴露它
当使用 fastify 和 helmet 时,可能会出现 CSP 问题,要解决此冲突,请按如下方式配置 CSP:
创建文档时,可以提供一些额外选项来微调库的行为。这些选项应为 SwaggerDocumentOptions 类型,具体如下:
例如,若需确保库生成类似 createUser 而非 UsersController_createUser 的操作名称,可进行如下设置:
您可以通过将一个符合 SwaggerCustomOptions 接口的配置对象作为第四个参数传递给 SwaggerModule#setup 方法来配置 Swagger UI。
ui 和 raw 是独立选项。禁用 Swagger UI (ui: false) 不会禁用 API 定义 (JSON/YAML)。反之,禁用 API 定义 (raw: []) 也不会影响 Swagger UI 的使用。
例如,以下配置将禁用 Swagger UI 但仍允许访问 API 定义:
在这种情况下,
http://localhost:3000/api-json仍可访问,但http://localhost:3000/api(Swagger UI)将不可用。
一个可用的示例在此处查看。