nestjs系列 - Swagger API
type
status
date
slug
summary
tags
category
icon
password

安装Swagger

pnpm i @nestjs/swagger
 
在Nestjs项目启用

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
构建服务
 

在Dto class添加装饰器

常用 Swagger 装饰器

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

问题

 
相比C# MVC项目的Swagger使用,感觉Nestjs引入Swagger还是太复杂了。
首选,每个dto实体都需要给全部属性添加上@ApiProperty,否则无法正常识别对应的dto属性;
其次,如果dto的属性配置太不智能,例如,entity往往有typeorm的comment,为何不能直接把它作为api属性的描述?
所以,我再探索prisma,并使用prisma schema统一化驱动typeorm entity、class-valitaion dto、swagger-api、restful api的搭建
 

© ittat 2016-2025