热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Swaggerapi接口管理使用总结

安装yarnadd@nestjsswaggerswagger-ui-express-D配置在main.ts引入并配置import{NestFactory}from@nestjsco

安装

yarn add @nestjs/swagger swagger-ui-express -D

配置

在main.ts引入并配置

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
//引入
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
async function bootstrap() {
const app = await NestFactory.create(AppModule);

//配置swagger
const swaggerOptiOns= new DocumentBuilder()
.setTitle('nestjs-api-文档') //文档标题
.setDescription('nestjs-api-说明') //文档描述
.setVersion('1.0') //文档版本
.addBasicAuth() //鉴权,可以输入token
.build(); //创建

//创建swagger
const document = SwaggerModule.createDocument(app, swaggerOptions);
//启动swagger
SwaggerModule.setup('doc', app, document); 访问路径为 localhost:8000/doc
await app.listen(8000);
}
bootstrap();

swagger装饰器

@ApiTags('user') 设置模块接口的分类,不设置默认分配到default
@ApiOperation({ summary: '标题', description: '详细描述'}) 单个接口描述
传参
@ApiQuery({ name: 'limit', required: true}) query参数
@ApiQuery({ name: 'role', enum: UserRole }) query参数
@ApiParam({ name: 'id' }) parma参数
@ApiBody({ type: UserCreateDTO, description: '输入用户名和密码' }) 请求体
响应
@ApiResponse({
status: 200,
description: '成功返回200,失败返回400',
type: UserCreateDTO,
})
验证
@ApiProperty({ example: 'Kitty', description: 'The name of the Cat' })
name: string;

在controller配置

user.controller.ts
import {
Controller,
Get,
Post,
Body,
Patch,
Query,
Param,
Delete,
HttpCode,
HttpStatus,
ParseIntPipe,
} from '@nestjs/common';
import {
ApiOperation,
ApiTags,
ApiQuery,
ApiBody,
ApiResponse,
} from '@nestjs/swagger';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
@Controller('user')
@ApiTags('user') 设置分类
export class UserController {
constructor(private readonly userService: UserService) { }
@Post()
@ApiOperation({ summary: '创建用户', description: '创建用户' }) 该接口
@HttpCode(HttpStatus.OK)
async create(@Body() user: CreateUserDto) {
return await this.userService.create(user);
}
@Get()
@ApiOperation({ summary: '查找全部用户', description: '创建用户' })
@ApiQuery({ name: 'limit', required: true }) 请求参数
@ApiQuery({ name: 'offset', required: true }) 请求参数
async findAll(@Query() query) {
console.log(query);
const [data, count] = await this.userService.findAll(query);
return { count, data };
}
@Get(':id')
@ApiOperation({ summary: '根据ID查找用户' })
async findOne(@Param('id', new ParseIntPipe()) id: number) {
return await this.userService.findOne(id);
}
@Patch(':id')
@ApiOperation({ summary: '更新用户' })
@ApiBody({ type: UpdateUserDto, description: '参数可选' }) 请求体
@ApiResponse({ 响应示例
status: 200,
description: '成功返回200,失败返回400',
type: UpdateUserDto,
})
async update(
@Param('id', new ParseIntPipe()) id: number,
@Body() user: UpdateUserDto,
) {
return await this.userService.update(id, user);
}
@Delete(':id')
@ApiOperation({ summary: '删除用户' })
async remove(@Param('id', new ParseIntPipe()) id: number) {
return await this.userService.remove(id);
}
}

编写dto

创建用列

import { IsNotEmpty, MinLength, MaxLength } from 'class-validator';
import { ApiProperty } from '@nestjs/swagger';
export class CreateUserDto {
@ApiProperty({ example: 'kitty', description: '用户名' }) 添加这里即可
@IsNotEmpty({ message: '用户名不能为空' })
username: string;
@ApiProperty({ example: '12345678', description: '密码' })
@IsNotEmpty({ message: '密码不能为空' })
@MinLength(6, {
message: '密码长度不能小于6位',
})
@MaxLength(20, {
message: '密码长度不能超过20位',
})
password: string;
}

更新用列

import {
IsEnum,
MinLength,
MaxLength,
IsOptional,
ValidateIf,
IsEmail,
IsMobilePhone,
} from 'class-validator';
import { ApiProperty } from '@nestjs/swagger';
import { Type } from 'class-transformer';
export class UpdateUserDto {
@ApiProperty({ description: '用户名', example: 'kitty', required: false }) 不是必选的
@IsOptional()
username: string;
@ApiProperty({ description: '密码', example: '12345678', required: false })
@IsOptional()
@MinLength(6, {
message: '密码长度不能小于6位',
})
@MaxLength(20, {
message: '密码长度不能超过20位',
})
password: string;
@ApiProperty({
description: '邮箱',
example: 'llovenest@163.com',
required: false,
})
@IsOptional()
@IsEmail({}, { message: '邮箱格式错误' })
@ValidateIf((o) => o.username === 'admin')
email: string;
@ApiProperty({
description: '手机号码',
example: '13866668888',
required: false,
})
@IsOptional()
@IsMobilePhone('zh-CN', {}, { message: '手机号码格式错误' })
mobile: string;
@ApiProperty({
description: '性别',
example: 'female',
required: false,
enum: ['male', 'female'],
})
@IsOptional()
@IsEnum(['male', 'female'], {
message: 'gender只能传入字符串male或female',
})
gender: string;
@ApiProperty({
description: '状态',
example: 1,
required: false,
enum: [0, 1],
})
@IsOptional()
@IsEnum(
{ 禁用: 0, 可用: 1 },
{
message: 'status只能传入数字0或1',
},
)
@Type(() => Number)
status: number;
}

测试接口 界面调试

接口调试截图

接口参数调试截图



推荐阅读
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 深入浅出 webpack 系列(二):实现 PostCSS 代码的编译与优化
    在前一篇文章中,我们探讨了如何通过基础配置使 Webpack 完成 ES6 代码的编译。本文将深入讲解如何利用 Webpack 实现 PostCSS 代码的编译与优化,包括配置相关插件和加载器,以提升开发效率和代码质量。我们将详细介绍每个步骤,并提供实用示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 如何使用ES6语法编写Webpack配置文件? ... [详细]
  • 理解和应用HTTP请求中的转发与重定向机制
    在HTTP请求处理过程中,客户端发送请求(通常简称为req),服务器进行相应处理后返回响应(通常简称为res)。理解和应用客户端的转发与重定向机制是前端开发的重要内容。这两种机制在Web开发中具有关键作用,能够有效管理和优化用户请求的处理流程。转发机制允许服务器内部将请求传递给另一个资源,而重定向则指示客户端向新的URL发起新的请求,从而实现页面跳转或资源更新。掌握这些技术有助于提升应用的性能和用户体验。 ... [详细]
  • 2.2 组件间父子通信机制详解
    2.2 组件间父子通信机制详解 ... [详细]
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文介绍了一种将 JavaScript 中的数字转换为 Excel 列字母标识的方法。通过使用字符编码和数学运算,该方法能够高效地将数字映射到对应的 Excel 列名。具体实现中,利用了字符 'A' 和 'Z' 的 Unicode 编码值,并结合字符串拼接技术,确保生成的列名准确无误。这种方法不仅适用于常规的列索引转换,还能处理超过 26 列的情况,适用于各种复杂场景。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 如何使用和示例代码解析 org.semanticweb.owlapi.model.OWLSubPropertyChainOfAxiom.getPropertyChain() 方法 ... [详细]
  • 利用 Python 中的 Altair 库实现数据抖动的水平剥离分析 ... [详细]
author-avatar
渤海科技城
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有