网站LOGO
白雾茫茫丶
页面加载中
11月21日
网站LOGO 白雾茫茫丶
记录学习、生活和有趣的事
菜单
  • 白雾茫茫丶
    记录学习、生活和有趣的事
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档
    点击复制本页信息
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。
    • 复制图片
    • 复制图片地址
    • 百度识图
    按住ctrl可打开默认菜单

    Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档

    谢明伟 · 原创 ·
    前端开发Nest 实战 · TypeScriptNest
    共 5684 字 · 约 2 分钟 · 535
    本文最后更新于2024年07月17日,已经过了127天没有更新,若内容或图片失效,请留言反馈

    什么是 Swagger ?

    Swagger 是一组围绕 OpenAPI 规范构建的开源工具,可以帮助您设计、构建、记录和使用 REST API。主要的 Swagger 工具 包括:

    Nest 集成 Swagger

    1. 安装依赖

      bash 代码:
      pnpm add @nestjs/swagger swagger-ui-express
    2. main.ts 文件中定义并初始化 SwaggerModule

      ts 代码:
       import { NestFactory } from '@nestjs/core';
       import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
      
       import { AppModule } from './app.module';
       async function bootstrap() {
      const app = await NestFactory.create(AppModule);
      
      // 构建swagger文档
      const options = new DocumentBuilder()
       .setTitle('vue3-admin')
       .setDescription('Background system based on Nest.js + Vue3 full stack development')
       .setVersion('1.0')
       .build();
      const document = SwaggerModule.createDocument(app, options);
      SwaggerModule.setup('docs', app, document);
      
      await app.listen(3000);
       }
       bootstrap();
    3. 启动服务,访问http://localhost:3000/docs,你会看到 Swagger 页面:

    DocumentBuilder 属性

    方法描述
    setTitle文档标题
    setDescription文档描述
    setVersion文档版本
    setTermsOfService文档服务条款
    setContact文档联系信息
    setLicense文档许可证信息
    addServer文档服务地址
    setExternalDoc文档外部链接
    setBasePath设置文档基础路径
    addTag添加文档标签
    addExtension添加扩展
    addSecurity添加安全方案
    addGlobalParameters添加全局参数
    addSecurityRequirements添加安全需求
    addBearerAuth添加 Bearer Token 认证
    addOAuth2添加 OAuth2 认证
    addApiKey添加 ApiKey
    addBasicAuth添加基础认证
    addCookieAuth添加 Cookie 认证
    build构建服务

    在 Nest 中使用

    1. DTO(响应数据传输对象) 文件中使用装饰器

      ts 代码:
       import { ApiProperty } from '@nestjs/swagger';
       import { IsNumberString, IsOptional, IsUUID } from 'class-validator';
      
       export class PostParamsDto {
      @ApiProperty({
       type: String,
       description: '岗位名称',
       required: false,
       default: '前端工程师',
      })
      name?: string;
      
      @ApiProperty({
       type: String,
       description: '所属组织',
       default: 'f45cd48b-e703-49db-91be-ae7f594e73e0',
       required: false,
      })
      @IsOptional()
      @IsUUID('all', { message: 'orgId 参数不正确' })
      orgId?: string;
      
      @ApiProperty({
       type: Number,
       description: '开始日期',
       default: 1721145600000,
       required: false,
      })
      @IsOptional()
      @IsNumberString({}, { message: '开始日期必须是时间戳格式' })
      startTime?: number;
      
      @ApiProperty({
       type: Number,
       description: '结束日期',
       default: 1721318399999,
       required: false,
      })
      @IsOptional()
      @IsNumberString({}, { message: '结束日期必须是时间戳格式' })
      endTime?: number;
       }
    2. Controller 控制器 中使用装饰器

      ts 代码:
      import { Controller, Get, Query } from '@nestjs/common';
      import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; // swagger 接口文档
      
      import { PostParamsDto } from './dto/params-post.dto';
      import { ResponsePostDto } from './dto/response-post.dto';
      import { PostManageService } from './post-manage.service';
      
      @ApiTags('智能行政-岗位管理')
      @Controller('post-manage')
      export class PostManageController {
       constructor(private readonly postManageService: PostManageService) 
      
       /**
        * @description: 查询岗位列表
        */
       @Get()
       @ApiOkResponse({ type: ResponsePostDto })
       @ApiOperation({ summary: '获取岗位管理列表' })
       findAll(@Query() params: PostParamsDto) {
      return this.postManageService.findAll(params);
       }
      }

    常用 Swagger 装饰器

    装饰器描述
    @ApiTags为控制器或方法添加标签,用于组织 Swagger UI 文档
    @ApiOperation为控制器方法添加操作描述,包括摘要和详细描述
    @ApiParam描述路径参数、请求参数或响应参数,包括名称、类型、描述等
    @ApiBody指定请求体的 DTO 类型,用于描述请求体的结构
    @ApiResponse描述 API 的响应,包括状态码、描述等
    @ApiBearerAuth指定请求需要携带 Bearer Token,用于身份验证
    @ApiProperty为 DTO 类型的属性添加元数据,如描述、默认值等
    @ApiQuery描述查询参数,包括名称、类型、描述等
    @ApiHeader描述请求头信息,包括名称、类型、描述等
    @ApiExcludeEndpoint标记一个控制器方法不在 Swagger UI 中显示

    效果图

    总结

    Nest 中集成 Swagger 文档可以帮助开发者自动生成和维护 API 文档,Swagger 的集成提供了在线生成、‌自动生成、‌可操作数据库等优点,规范了 API 的标准化和一致性,后期还可以把 Swagger 文档导入到其他平台,例如 ApiFox

    不足之处就是会增加开发者的工作量,每一个接口都需要保持注释和装饰器的准确性和完整性,仍然需要一定的维护工作。

    声明:本文由 谢明伟(博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。

    还没有人喜爱这篇文章呢

    我要发表评论 我要发表评论
    博客logo 白雾茫茫丶 记录学习、生活和有趣的事 51统计 百度统计
    MOEICP 萌ICP备20236860号 ICP 粤ICP备2023007649号 ICP 粤公网安备44030402006402号

    💻️ 谢明伟 13分钟前 在线

    🕛

    本站已运行 2 年 325 天 6 小时 47 分

    🌳

    自豪地使用 Typecho 建站,并搭配 MyLife 主题
    白雾茫茫丶. © 2022 ~ 2024.
    网站logo

    白雾茫茫丶 记录学习、生活和有趣的事