快速入门nest.js(9/10)--openAPI

简介: openAPI规范是一种与语言无关的定义格式,用于描述RESTful API。Open API文档允许我们描述我们整个API,包括:可用的操作和端点;操作参数:每个操作的输入输出;认证方法;联系信息、许可、使用条款和其他信息;

简介

openAPI规范是一种与语言无关的定义格式,用于描述RESTful API。Open API文档允许我们描述我们整个API,包括:

  • 可用的操作和端点;
  • 操作参数:每个操作的输入输出;
  • 认证方法;
  • 联系信息、许可、使用条款和其他信息;

安装


// npm i @nestjs/swagger swagger-ui-express // 如果你切换为了fastify,则安装fastify-swagger


基本


import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { AppModule } from './app.module';
// ...
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
// ...
  const options = new DocumentBuilder()
    .setTitle('Iluvcoffee')
    .setDescription('Coffee application')
    .setVersion('1.0')
    .build();
  
  const document = SwaggerModule.createDocument(app, options);
  SwaggerModule.setup('api', app, document);   // 第一个参数为路由路径
  await app.listen(3000);
}
bootstrap();

插件使用


虽然上述可以生成最基本的api文档,但是我们会发现没有请求正文的期望等信息:

我们的应用程序代码实际上有一个专用的DTO类,它代表此端点的输入API,但是这还不足以自动生成openAPI。Typescript的元数据反射系统有几个限制,比如确定一个类包含哪些属性,或者识别给定属性是可选的还是必须的。其中一些约束可以在编译时解决,Nest提供了一个插件来增强Typescript编译过程,以减少我们需要创建的样板代码数量来解决这个问题。这个插件是可选的,如果你愿意,你可以手动声明所有的swagger装饰器。最好还是在需要覆盖插件提供的基本功能的某个地方添加特定的装饰器。

使用这个插件:


// nest-cli.json
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
      // 这里开始
  "compilerOptions": {
    "deleteOutDir": true,
    "plugins": ["@nestjs/swagger/plugin"]
  }
}


然后重新打开swagger,我们就可以发现其反映了CreateCoffeeDto及其所有属性:

但是UpdateCoffeeDto却还是不能正常反映出来:

让我们打开该Dto文件:

import {PartialType} from '@nestjs/mapped-types';
import { CreateCoffeeDto } from './create-coffee.dto';
export class UpdateCoffeeDto extends PartialType(CreateCoffeeDto){
}


改为:


    
import {PartialType} from '@nestjs/swagger';  // 这里,它会实现相同的功能并且将每个属性标记会可选的。
import { CreateCoffeeDto } from './create-coffee.dto';
export class UpdateCoffeeDto extends PartialType(CreateCoffeeDto){
}


然后就有了对应的反映。

@ApiProperty()


定义实例值并添加属性描述


    
// create-coffee.dto
import { ApiProperty } from '@nestjs/swagger';
import { IsString } from 'class-validator';
export class CreateCoffeeDto {
  @ApiProperty({description: 'The name of a coffee.'})
  @IsString()
  readonly name: string;
  @ApiProperty({description: 'The brand of a coffee.'})
  @IsString()
  readonly brand: string;
  @ApiProperty({example: []})
  @IsString({each: true})
  readonly flavors: string[];
}


然后就可以看到对应的描述和和示例了:

@ApiResponse()


// coffees.controller
// @ApiResponse({status: 403, description: 'Forbidden.'})  // 或者下面这种
@ApiForbiddenResponse({description: 'Forbidden.'})
@Public()
@Get()
findAll(@Protocol() protocol, @Query() paginationQuery: PaginationQueryDto) {
    console.log(protocol);
    return this.coffeeService.findAll(paginationQuery);
}

后我们就可以看到对应的路由上多了一种响应示例:

标签

为一组资源添加标签,这样就可以将端点的相关集分组和组织在一起。


    
@ApiTags('coffees')
@Controller('coffees')
export class CoffeesController {
    // ...
}

    


image.png

目录
相关文章
|
9月前
|
存储 监控 JavaScript
Node.js 性能平台5分钟快速入门
首先,确保拥有阿里云账号并开通服务,以及一台可上网的服务器。然后,创建应用并记下App ID和App Secret。通过tnvm安装Node.js性能平台组件,包括alinode和agenthub,检查安装成功的方法是`which node`和`which agenthub`命令显示路径包含`.tnvm`。接着,启动agenthub,并在服务器上运行一个示例应用(demo.js),该应用模拟计算密集型任务。最后,通过阿里云控制台观察监控数据和执行诊断操作。注意,性能平台每分钟上传一次日志,可能需等待几分钟才能看到数据。详细部署指南可参考官方文档。
108 6
|
8月前
|
JavaScript 前端开发 安全
【JavaScript 】DOM操作快速入门
【JavaScript 】DOM操作快速入门
136 2
|
8月前
|
JavaScript 前端开发 Java
JavaScript快速入门
JavaScript快速入门
44 1
|
7月前
|
SQL 前端开发 JavaScript
JavaScript快速入门 有这一篇就够!
JavaScript快速入门 有这一篇就够!
|
7月前
|
存储 JavaScript 前端开发
如何快速入门使用Vue.js
如何快速入门使用Vue.js
58 0
|
8月前
|
Web App开发 存储 JavaScript
JavaScript快速入门
JavaScript快速入门
40 0
|
9月前
|
JavaScript 前端开发 Java
JavaScript 快速入门手册
JavaScript 快速入门手册
|
JavaScript
【JS】快速入门DOM
【JS】快速入门DOM
65 0
|
9月前
|
JavaScript 前端开发 Java
JavaScript 快速入门手册
JavaScript 快速入门手册
49 0
|
9月前
|
JavaScript 前端开发
node.js 快速入门
node.js 快速入门
80 0

热门文章

最新文章

  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    23
  • 2
    Node.js 中实现多任务下载的并发控制策略
    32
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    25
  • 4
    【JavaScript】深入理解 let、var 和 const
    48
  • 5
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    44
  • 6
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    53
  • 7
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    55
  • 8
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    71
  • 9
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55
  • 10
    JavaWeb JavaScript ③ JS的流程控制和函数
    62