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

简介: 这篇文章介绍了Swagger,它是一组开源工具,围绕OpenAPI规范帮助设计、构建、记录和使用RESTAPI。文章主要讨论了Swagger的主要工具,包括SwaggerEditor、SwaggerUI、SwaggerCodegen等。然后介绍了如何在Nest框架中集成Swagger,展示了安装依赖、定义DTO和控制器等步骤,以及如何使用Swagger装饰器。文章最后总结说,集成Swagger文档可以自动生成和维护API文档,规范API标准化和一致性,但会增加开发者工作量,需要保持注释和装饰器的准确性。

什么是 Swagger ?

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

Nest 集成 Swagger

  1. 安装依赖
    pnpm add @nestjs/swagger swagger-ui-express
    
  2. main.ts 文件中定义并初始化 SwaggerModule

    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 页面:
    ve5yt9s0se80a5cityx55zpj01rtdcv1.png

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(响应数据传输对象) 文件中使用装饰器

    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 控制器 中使用装饰器

    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 中显示

效果图

cz9r4j5zgochx1r1xc2g6og0yx5mlv8d.png

总结

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

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

相关文章
|
8天前
|
数据挖掘 API 开发者
深度解析!淘宝商品详情 API 接口的高效调用与实战应用
淘宝商品详情API为开发者提供高效获取商品信息的途径,支持名称、价格、销量等详细数据的提取。接口通过GET/POST请求方式调用,需携带商品ID与授权信息(如AppKey)。其特点包括数据全面、实时性强及安全性高,满足电商应用、数据分析等需求。本文还提供了Python调用示例,涵盖签名生成、参数构建及请求发送全流程,助力开发者快速集成淘宝商品数据至自身系统中。
|
2月前
|
存储 供应链 监控
1688商品数据实战:API搜索接口开发与供应链分析应用
本文详细介绍了如何通过1688开放API实现商品数据的获取与应用,涵盖接入准备、签名流程、数据解析存储及商业化场景。开发者可完成智能选品、价格监控和供应商评级等功能,同时提供代码示例与问题解决方案,确保法律合规与数据安全。适合企业开发者快速构建供应链管理系统。
|
16天前
|
存储 人工智能 Java
Spring AI与DeepSeek实战四:系统API调用
在AI应用开发中,工具调用是增强大模型能力的核心技术,通过让模型与外部API或工具交互,可实现实时信息检索(如天气查询、新闻获取)、系统操作(如创建任务、发送邮件)等功能;本文结合Spring AI与大模型,演示如何通过Tool Calling实现系统API调用,同时处理多轮对话中的会话记忆。
256 57
|
1天前
|
监控 测试技术 数据库连接
RunnerGo API 性能测试实战:从问题到解决的全链路剖析
API性能测试是保障软件系统稳定性与用户体验的关键环节。本文详细探讨了使用RunnerGo全栈测试平台进行API性能测试的全流程,涵盖测试计划创建、场景设计、执行分析及优化改进。通过电商平台促销活动的实际案例,展示了如何设置测试目标、选择压测模式并分析结果。针对发现的性能瓶颈,提出了代码优化、数据库调优、服务器资源配置和缓存策略等解决方案。最终,系统性能显著提升,满足高并发需求。持续关注与优化API性能,对系统稳定运行至关重要。
|
3天前
|
JSON API 开发者
天猫商品详情 API 接口:功能、调用与实战攻略
天猫商品详情API为电商从业者、开发者和数据分析人员提供高效的商品数据获取途径。通过商品ID,该接口可返回包括基本信息、价格、库存及图片等详细内容,具有高准确性、易集成和功能丰富的特点。示例代码展示了如何用Python调用此API,生成签名确保请求安全,助力用户优化定价策略、开发应用或分析市场趋势。
33 10
|
8天前
|
JSON API 数据格式
一文读懂天猫商品详情 API 接口:功能、调用与实战攻略
天猫商品详情API为电商从业者、开发者和数据分析人员提供高效的商品数据获取途径。通过输入商品ID,可获取商品基本信息(名称、品牌等)、价格信息(售价、促销价等)、库存状态、商品描述及图片链接等详细内容。本文还提供了Python调用示例,包含签名生成、参数构建与请求发送等功能,帮助用户快速集成API,满足定价优化、市场分析等需求。使用时需替换示例中的AppKey与商品ID,并遵守平台规范。
85 16
|
1天前
|
XML JSON API
如何从 Swagger 导出 API 文档
Swagger 使这项任务相对简单,允许开发者以各种格式(如 JSON 和 YAML)导出 API 文档。在这篇博文中,我们将详细探讨如何从 Swagger 导出 API 文档。
如何从 Swagger 导出 API 文档
|
7天前
|
数据采集 JSON API
Python 实战:用 API 接口批量抓取小红书笔记评论,解锁数据采集新姿势
小红书作为社交电商的重要平台,其笔记评论蕴含丰富市场洞察与用户反馈。本文介绍的小红书笔记评论API,可获取指定笔记的评论详情(如内容、点赞数等),支持分页与身份认证。开发者可通过HTTP请求提取数据,以JSON格式返回。附Python调用示例代码,帮助快速上手分析用户互动数据,优化品牌策略与用户体验。
|
1天前
|
存储 JSON API
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
|
2月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现

热门文章

最新文章