现如今,前后台开发分离已成为一种标准,后台负责提供api,其余功能交给前台来实现,但是项目开发中的沟通成本也随之提高,这部分成本主要体现在前台需要接口文档,但是后台可能没时间写或者其他原因,导致功能对接缓慢。Swagger很好的解决了这个问题,它可以动态生成Api接口文档,今天我们简单说下在Nest项目中集成Swagger。
1 安装Swagger
yarn add @nestjs/swagger swagger-ui-express --save
复制
2 配置Swagger
需要在src目录下main.ts文件中配置及构建出口,内容如下:
import { NestFactory } from '@nestjs/core'; import { ValidationPipe } from '@nestjs/common'; import { NestExpressApplication } from '@nestjs/platform-express'; import { AppModule } from './app.module'; // 过滤器 import { HttpExceptionFilter } from './filters/http-exception.filter'; // 自定义拦截器 import { TransformInterceptor } from './interceptor/transform.interceptor'; // api文档插件 import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; async function bootstrap() { const app = await NestFactory.create<NestExpressApplication>(AppModule); app.useGlobalFilters(new HttpExceptionFilter()); app.useGlobalInterceptors(new TransformInterceptor()); app.useGlobalPipes(new ValidationPipe()); //开启一个全局验证管道 const options = new DocumentBuilder() .setTitle('接口文档') .setDescription('系统接口文档') // 文档介绍 .setVersion('1.0.0') // 文档版本 .build(); // 为了创建完整的文档(具有定义的HTTP路由),我们使用类的createDocument()方法SwaggerModule。此方法带有两个参数,分别是应用程序实例和基本Swagger选项。 const document = SwaggerModule.createDocument(app, options); SwaggerModule.setup('/api', app, document); await app.listen(3000); } bootstrap();
复制
这里面我们只关注10、13、17到24行,
DocumentBuilder 有助于构建符合 OpenAPI 规范的基础文档。它提供了几种允许设置诸如标题,描述,版本等属性的方法。为了创建一个完整的文档(使用已定义的 HTTP 路由),我们使用 SwaggerModule 类的 createDocument() 方法。此方法接收两个参数,即应用程序实例和 Swagger 选项对象。
一旦创建完文档,我们就可以调用 setup() 方法。它接收:
- Swagger UI 的挂载路径
- 应用程序实例
- 上面已经实例化的文档对象
3 启动项目
yarn start
复制
应用程序运行时,打开浏览器并导航到 http://localhost:3000/api 。你应该可以看到 Swagger UI
4 其他配置项
还提供很多配置项,如ApiQuery、ApiBody、ApiParam、ApiHeader、ApiHeaders等,这里就不一一介绍了,有兴趣可以浏览官方文档:
https://docs.nestjs.com/openapi/introduction