02.打造高效API文档:Swagger在NestJS中的应用

186 阅读3分钟

什么是Swagger

Swagger 是一个开源项目,提供了一组规范和工具,用于设计、构建、记录和使用 RESTful Web 服务。它允许您在不同的编程语言和工具中自动生成和呈现文档。

Swagger 的主要组件包括:

  1. Swagger 规范:一种用于描述 RESTful API 的标准格式。它使用 JSON 或 YAML 语法来定义 API 的端点、操作、参数、响应等信息。这种标准化的描述格式使得 API 文档易于理解和使用。
  2. Swagger UI:一个基于 Web 的交互式文档界面,用于可视化和测试 API。它根据 Swagger 规范生成漂亮的 UI,让开发人员和客户端能够浏览和尝试 API 操作。
  3. Swagger 工具:一组用于生成、解析和操作 Swagger 规范的工具,包括代码生成器、模拟服务器等。这些工具可以帮助开发人员更高效地构建和集成 API。

使用 Swagger 的主要优势包括:

  1. 标准化 API 文档:Swagger 规范为 API 提供了一种统一的描述方式,使文档易于阅读和理解。
  2. 自动化文档生成:借助 Swagger 工具,您可以从代码或规范中自动生成 API 文档,减少手动维护文档的工作量。
  3. API 可视化和测试:Swagger UI 提供了一个友好的 Web 界面,允许开发人员可视化和测试 API,加快开发和集成过程。
  4. 代码生成:Swagger 工具可以根据规范自动生成客户端和服务器端代码,提高开发效率。
  5. 语言无关:Swagger 规范使用 JSON 或 YAML 格式,因此可以跨编程语言和框架使用。

想要在 Nest.js 应用程序中集成 Swagger,你可以安装 @nestjs/swagger 模块。

以下是具体步骤:

  1. 安装依赖

首先,你需要安装 @nestjs/swagger 和 swagger-ui-express 依赖项:

pnpm install --save @nestjs/swagger swagger-ui-express

2. 引入 SwaggerModule

在你的主模块中导入 SwaggerModule并进行配置:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {
  constructor(private readonly appService: AppService) {}

  configure(consumer: MiddlewareConsumerBuilder) {
    const config = new DocumentBuilder()
      .setTitle('My Nest.js App')
      .setDescription('The description of my application')
      .setVersion('1.0')
      .build();
    const document = SwaggerModule.createDocument(this.appService, config);
    SwaggerModule.setup('api', this.appService, document);
  }
}

在上面的代码中,我们使用 DocumentBuilder 配置了 Swagger 文档的元数据,例如标题、描述和版本号。然后,我们使用 SwaggerModule.createDocument 方法生成文档对象,并使用 SwaggerModule.setup 方法设置 Swagger UI 的路径。

  1. 添加 API 元数据

接下来,你需要在控制器和模型上添加 Swagger 元数据注释,以便 Swagger 文档能够正确地显示你的 API。

例如,在控制器中:

import { Controller, Get } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';

@ApiTags('Cats')
@Controller('cats')
export class CatsController {
  @Get()
  findAll() {
    return [];
  }
}

在模型中:

import { ApiProperty } from '@nestjs/swagger';

export class CreateCatDto {
  @ApiProperty()
  name: string;

  @ApiProperty()
  age: number;
}

4. 启动应用程序

现在,当你启动应用程序时,你可以在 http://localhost:3000/api 访问 Swagger UI。

在 Swagger UI 中,你可以查看和测试你的 API 端点。它会根据你添加的注释自动生成文档。

要进一步定制 Swagger UI,你可以查看 @nestjs/swagger 模块的文档,了解更多可用的选项和高级用法。

通过集成 Swagger,你可以为你的 Nest.js 应用程序生成优雅且易于理解的 API 文档,这对于开发、测试和维护 API 非常有帮助。

实际的效果如下:

image.png

总结:

Swagger可以帮助我们快速的测试接口,对于开发、测试和维护 API 非常有帮助。