Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档
什么是 Swagger ?
Swagger 是一组围绕 OpenAPI 规范构建的开源工具,可以帮助您设计、构建、记录和使用 REST API。主要的 Swagger 工具 包括:
- Swagger Editor:基于浏览器的编辑器,您可以在其中编写 OpenAPI 定义
- Swagger UI:将 OpenAPI 定义呈现为交互式文档
- Swagger Codegen:从 OpenAPI 定义中生成服务器存根和客户端库
- Swagger Editor Next(beta):基于浏览器的编辑器,您可以在其中编写和查看 OpenAPI 和 AsyncAPI 定义
- Swagger Core:用于创建、使用和处理 OpenAPI 定义的 Java 相关库
- Swagger Parser:用于解析 OpenAPI 定义的独立库
- Swagger APIDom:提供了一个单一的、统一的结构,用于跨各种描述语言和序列化格式描述
API
Nest 集成 Swagger
- 安装依赖
pnpm add @nestjs/swagger swagger-ui-express
- 在
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();
- 启动服务,访问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 中使用
- 在
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;}
- 在
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 中显示 |
效果图

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

不足之处就是会增加开发者的工作量,每一个接口都需要保持注释和装饰器的准确性和完整性,仍然需要一定的维护工作。
相关文章:
Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档
什么是 Swagger ? Swagger 是一组围绕 OpenAPI 规范构建的开源工具,可以帮助您设计、构建、记录和使用 REST API。主要的 Swagger 工具 包括: Swagger Editor:基于浏览器的编辑器,您可以在其中编写 OpenAPI 定义Swagger UI&…...
spark shell
1.进行shell命令行 spark-shell 2.创建RDD 2.1 读取文件创建RDD 2.1.1读取linux文件系统的文件创建RDD --需要保证每一个worker中都有该文件 val data1 sc.textFile("file:/opt/file/word.txt") 2.1.2读取hdfs文件系统上的文件创建RDD val data2sc.textFile("…...
集群架构-web服务器(接入负载均衡+数据库+会话保持redis)--15454核心配置详解
紧接着前面的集群架构深化—中小型公司(拓展到大型公司业务)–下面图简单回顾一下之前做的及故障核心知识总结(等后期完全整理后,上传资源希望能帮大家) web集群架构-接入负载均衡部署web02服务器等 web集群-搭建web0…...
# Redis 入门到精通(七)-- redis 删除策略
Redis 入门到精通(七)-- redis 删除策略 一、redis 删除策略–过期数据的概念 1、Redis 中的数据特征 Redis 是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态。 XX :具有时效性…...
10:00面试,10:08就出来了,问的问题有点变态。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到6月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...
html+canvas 实现签名功能-手机触摸
手机上的效果图 需要注意,手机触摸和鼠标不是一个事件,不能通用,上一篇是关于使用鼠标的样例 相关代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewpo…...
前端组件化探索与实践:Vue自定义暂无数据组件的开发与应用
摘要 随着前端开发技术的不断进步,组件化开发已成为提升开发效率、降低维护成本的关键手段。本文旨在通过介绍一款Vue自定义暂无数据组件的开发与实践,深入探讨前端组件化开发的重要性、优势及其在实际项目中的应用。 一、引言 在前端开发中࿰…...
《汇编语言 基于x86处理器》- 读书笔记 - Visual Studio 2019 配置 MASM环境
安装 Visual Studio 2019 配置 MASM环境 下载 Visual Studio Installer安装 Visual Studio 20191. 双击运行2. 自定义安装内容3. 修改 MSVC 工具集版本4. 设置主题(可选)5. 安装代码高亮插件 AsmDude(可选)6. 通义灵码(…...
Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析
Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析 简介 本文档适用于合宙Air780E、Air780EP、Air780EQ、Air201 关联文档和使用工具: 从Ramdump里分析内存泄漏问题 无法抓底层log的情况下如何导出死机dump Luatools下载调试工具 EPAT抓取底层日志 F…...
前端经验:使用sheetjs导出CSV文本为excel
应用场景 很多web表格组件没有提供直接的导出excel功能,但提供了导出CSV的功能。 如果能想办法拿到CSV的内容,就可以利用sheetjs生成excel并导出。 实施步骤 1.拿到CSV的内容字符 每种表格组件都有各自的CSV生成方法,不管用什么方法&…...
【nnUNetv2进阶】十五、nnUNetv2 魔改网络-小试牛刀-引入ECA
nnunet使用及改进教程。 【nnUNetv2实践】一、nnUNetv2安装 【nnUNetv2实践】二、nnUNetv2快速入门-训练验证推理集成一条龙教程 【nnUNetv2进阶】三、nnUNetv2 自定义网络-发paper必会-CSDN博客 其他网络改进参考: 【nnUNetv2进阶】四、nnUNetv2 魔改网络-小试牛刀-加入…...
centos(或openEuler系统)安装kafka集群
安装192.168.9.60、192.168.9.61、192.168.9.62这3台kafka集群(kraft模式,不用zookeeper) 不带密码的 1.每台机器安装kafka: cd /home/kafka wget https://downloads.apache.org/kafka/3.3.1/kafka_2.13-3.3.1.tgz 不通就换这…...
HarmonyOS根据官网写案列~ArkTs从简单地页面开始
Entry Component struct Index {State message: string 快速入门;build() {Column() {Text(this.message).fontSize(24).fontWeight(700).width(100%).textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily(HarmonyHeiTi-Bold).lineHeight(33)Scroll() {Column() {Ba…...
GraphRAG+ollama+LM Studio+chainlit
这里我们进一步尝试将embedding模型也换为本地的,同时熟悉一下流程和学一些新的东西 1.环境还是用之前的,这里我们先下载LLM 然后你会在下载nomic模型的时候崩溃,因为无法搜索,无法下载 解决办法如下lm studio 0.2.24国内下载…...
【中项第三版】系统集成项目管理工程师 | 第 5 章 软件工程② | 5.4 - 5.8
前言 第 5 章对应的内容选择题和案例分析都会进行考查,这一章节属于技术的内容,学习要以教材为准。 目录 5.4 软件实现 5.4.1 软件配置管理 5.4.2 软件编码 5.4.3 软件测试 5.5 部署交付 5.5.1 软件部署 5.5.2 软件交付 5.5.3 持续交付 5.5.4…...
6. dolphinscheduler-3.0.0伪集群部署
环境说明: 主机名:cmc01为例 操作系统:centos7 安装部署软件版本部署方式centos7zookeeperzookeeper-3.4.10伪分布式hadoophadoop-3.1.3伪分布式hivehive-3.1.3-bin伪分布式clickhouse21.11.10.1-2单节点多实例dolphinscheduler3.0.0单节…...
防火墙内容安全综合实验
一、实验拓扑 二、实验要求 1,假设内网用户需要通过外网的web服务器和pop3邮件服务器下载文件和邮件,内网的FTP服务器也需要接受外网用户上传的文件。针对该场景进行防病毒的防护。 2,我们需要针对办公区用户进行上网行为管理,要…...
常见的数据分析用例 —— 信用卡交易欺诈检测
文章目录 引言数据集分析1. 读入数据并快速浏览2.计算欺诈交易占数据集中交易总数的百分比3. 类别不平衡对模型的影响3.1 总体思路(1)数据的划分(2)训练模型(3)测试模型(4)解决不平衡…...
IP地址:由电脑还是网线决定?
IP地址:由电脑还是网线决定? 在互联网时代,IP地址是我们进行网络通信的基础。然而,对于IP地址究竟是由电脑决定还是由网线决定的问题,不少人可能存在疑惑。本文将从IP地址的定义、分配方式以及影响因素等方面进行探讨…...
从源码到桌面:手把手教你用Python搭建SimpleFOCStudio开发环境(Windows/Mac)
从源码到桌面:手把手教你用Python搭建SimpleFOCStudio开发环境(Windows/Mac) 在开源硬件和电机控制领域,SimpleFOCStudio已成为开发者调试无刷电机的利器。不同于直接下载可执行文件的"快餐式"使用,从源码构…...
Visual Studio Code 在 MacOS 在 Linux 上的完整安装与高效开发指南:从部署到远程开发实战
VVisual Studio Code 在 MacOS 在 Linux 上的完整安装与高效开发指南:从部署到远程开发实战 摘要一、VS Code 简介二、下载与安装1. 下载 VS Code2. 安装步骤方法 1:通过包管理器安装(以 Ubuntu/Debian 为例)方法 2:通…...
Git入门终极指南:命令行vs GUI工具效率对比分析
Git入门终极指南:命令行vs GUI工具效率对比分析 【免费下载链接】hello-git Curso para aprender a trabajar con el sistema de control de versiones Git y la plataforma GitHub desde cero y para principiantes. 项目地址: https://gitcode.com/gh_mirrors/h…...
终极指南:3分钟学会用QMCDecode解锁QQ音乐加密文件
终极指南:3分钟学会用QMCDecode解锁QQ音乐加密文件 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转换…...
ClickHouse:开源数据引擎在AI浪潮爆发,挑战传统数据库巨头
ClickHouse:开源数据引擎爆发,在AI浪潮中挑战传统数据库巨头过去18个月,开源数据基础设施里最热的公司除了Supabase可能就是ClickHouse了。ClickHouse Cloud ARR在2025年保持250%的同比增速,第三方估计从2024年中的约1500万美元增…...
AI应用安全新挑战:基于模糊测试的提示词注入漏洞自动化检测
1. 项目概述:当AI提示词成为攻击目标最近在跟几个做AI应用安全的朋友聊天,大家不约而同地提到了一个词:“提示词攻击”。听起来有点抽象,对吧?简单来说,就是有人不直接黑你的系统,而是通过精心构…...
特征工程:从数据到特征
特征工程:从数据到特征 1. 技术分析 1.1 特征工程流程 特征工程是机器学习的核心环节: 特征工程流程数据理解 → 特征提取 → 特征选择 → 特征转换 → 特征验证1.2 特征类型 类型描述处理方法数值型连续数值归一化、标准化分类型类别标签独热编码、…...
Python 爬虫进阶技巧:定时爬虫任务实现无人值守采集
前言 常规爬虫多依赖手动触发脚本运行,单次采集完成后需人工二次启动,无法满足日常周期性数据监控、行情抓取、资讯同步、业务台账定时归档等常态化采集需求。搭建可自主调度、自动启停、周期循环的定时爬虫任务,脱离人工干预实现无人值守全自动采集,是爬虫从临时脚本走向…...
系统化调试方法论:从STOP到DETECT,告别救火式排查
1. 项目概述:一套源自实战的系统化调试方法论如果你是一名开发者,或者正在和AI Agent打交道,大概率都经历过这种场景:线上服务突然报错,你心急火燎地登录服务器,看着日志里一堆堆的异常信息,脑子…...
Perplexity + Sage期刊深度协同方案(科研人私藏版):从模糊关键词到JCR一区论文PDF的全自动链路搭建
更多请点击: https://intelliparadigm.com 第一章:Perplexity Sage期刊深度协同方案(科研人私藏版):从模糊关键词到JCR一区论文PDF的全自动链路搭建 核心协同逻辑:语义增强型检索闭环 Perplexity 的实时…...
