NestJS-Knife4j
文章目录
- 前言
- ✅ 一、什么是 Knife4j?
- ✅ 二、Knife4j 与 Swagger 对比
- ✅ 三、NestJS-Knife4j 集成
- 1. 安装依赖
- 2. 配置 Swagger 与 Knife4j
- 3. 启动应用并访问接口文档
- ✅ 四、功能增强
- 1. **接口分组**
- 2. **请求/响应示例**
- 3. **接口文档的美化**
- ✅ 五、总结
前言
NestJS-Knife4j 是一个集成 Knife4j(一个增强版的 Swagger)功能的 NestJS 插件。Knife4j 是 Swagger 的增强版,提供了更丰富的功能,优化了 UI 和接口文档的展示效果,增强了开发人员和 API 使用者的交互体验。对于已经在使用 Swagger 的项目,Knife4j 提供了一些额外的优点和增强功能。
✅ 一、什么是 Knife4j?
Knife4j 是一个基于 Swagger 的前端 UI 工具,旨在通过增强 Swagger 的功能来优化接口文档的用户体验。它在 Swagger 的基础上提供了以下增强特性:
- UI 优化:提供了更加友好和直观的接口文档界面。
- 增强的文档交互:允许用户直接在 UI 中尝试接口请求,支持 API 测试。
- 丰富的功能:如支持接口分组、API 文档定制、参数样式、请求示例、数据格式展示等。
- 更好的性能:相比于原生 Swagger,Knife4j 提供了更快速的界面加载和渲染。
✅ 二、Knife4j 与 Swagger 对比
| 特性 | Swagger | Knife4j |
|---|---|---|
| 界面 | 基本的 API 文档展示,UI 较为简洁 | 改进的 UI 界面,提供更多功能,设计更美观 |
| 接口分组 | 支持,但自定义不多 | 支持多种分组方式,可以自定义接口分组,增强功能 |
| 请求示例 | 支持,但功能有限 | 支持接口请求示例、返回值示例等更详细的说明 |
| API 测试 | 支持接口测试 | 增强的 API 测试功能,更多交互式支持 |
| 性能 | 较基础,加载速度较慢 | 更快的加载速度,支持更大的接口文档 |
| 集成方式 | 通过 @nestjs/swagger 进行集成 | 通过 nestjs-knife4j 进行集成 |
✅ 三、NestJS-Knife4j 集成
集成 nestjs-knife4j 可以让你快速实现 Knife4j 的增强功能,提升 API 文档体验。
1. 安装依赖
首先,安装 nestjs-knife4j 和 @nestjs/swagger(如果还没有安装的话):
pnpm add nestjs-knife4j @nestjs/swagger swagger-ui-express
2. 配置 Swagger 与 Knife4j
在 main.ts 中配置 Swagger 和 Knife4j:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { Knife4jModule } from 'nestjs-knife4j';async function bootstrap() {const app = await NestFactory.create(AppModule);// 设置 Swagger 配置const config = new DocumentBuilder().setTitle('My API').setDescription('API documentation with Knife4j').setVersion('1.0').addBearerAuth() // 如果需要认证的话.build();const document = SwaggerModule.createDocument(app, config);SwaggerModule.setup('api-docs', app, document);// 配置 Knife4japp.use('/doc', Knife4jModule.setup(document, app));await app.listen(3000);
}bootstrap();
3. 启动应用并访问接口文档
- 启动项目后,可以访问以下两个路径:
-
Swagger:
http://localhost:3000/api-docs

-
Knife4j:
http://localhost:3000/doc

-
你会发现,Knife4j 提供了更为丰富的界面和更快的加载速度。
注意:如果你的swagger 集成前缀http://localhost:3000/api/v1/api-docs 的话,
由于 nestjs-knife4j 1.x 目前不支持全局前缀,/doc.html 只能在根路径访问,还是这个:http://localhost:3000/doc.html
✅ 四、功能增强
通过集成 Knife4j,你能享受到以下增强功能:
1. 接口分组
在 Swagger 中,API 的分组通常通过 tags 来实现,但 Knife4j 提供了更加直观的分组方式,并可以在 UI 中进行操作。
@ApiTags('User Management')
@Controller('users')
export class UsersController {@Get()findAll() {return this.userService.findAll();}
}
Knife4j 会自动生成清晰的接口分组,使文档更有组织性。
2. 请求/响应示例
Knife4j 支持展示接口的请求参数和返回数据示例,帮助开发人员和使用者更好地理解接口的使用方式。
@ApiOperation({ summary: 'Create a user' })
@ApiResponse({ status: 201, description: 'User created', type: User })
@Post()
create(@Body() createUserDto: CreateUserDto) {return this.userService.create(createUserDto);
}
Knife4j 会将 @ApiResponse 中的示例返回值自动展示出来。
3. 接口文档的美化
- Knife4j 提供了自定义的主题,可以对 API 文档的外观进行更多定制,适应不同的 UI 风格。
- 提供了 RESTful 风格的接口展示,让开发者和接口使用者能够更清晰地看到接口的设计。
✅ 五、总结
| 功能 | Swagger | Knife4j |
|---|---|---|
| 界面美观度 | 较为简洁,基础功能 | 美化过的界面,支持更多交互 |
| 接口分组 | 基本支持 | 强大的接口分组,支持更精细化的组织方式 |
| API 请求示例 | 基本支持 | 提供完整的请求/响应示例,增强 API 文档体验 |
| 性能 | 普通 | 更好的性能,加载速度更快 |
| 集成方式 | 基础的集成方式 | 通过 nestjs-knife4j 快速集成,UI 功能丰富 |
Knife4j 在 Swagger 基础上提供了更多的功能,优化了界面的美观和交互,适合需要更丰富接口文档的团队,特别是在大型企业应用中,它能显著提升开发者和 API 使用者的体验。
如果你已经在项目中使用了 Swagger,集成 Knife4j 将会是一个很好的提升,特别是在需要优化 API 文档展示、增强协作时。
相关文章:
NestJS-Knife4j
文章目录 前言✅ 一、什么是 Knife4j?✅ 二、Knife4j 与 Swagger 对比✅ 三、NestJS-Knife4j 集成1. 安装依赖2. 配置 Swagger 与 Knife4j3. 启动应用并访问接口文档 ✅ 四、功能增强1. **接口分组**2. **请求/响应示例**3. **接口文档的美化** ✅ 五、总结 前言 N…...
【项目管理】成本类计算 笔记
项目管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应&…...
手机投屏到电视方法
一、投屏软件 比如乐播投屏 二、视频软件 腾讯视频、爱奇艺 三、手机无线投屏功能 四、有线投屏 五、投屏器...
(三十)安卓开发中的MVP模式详解
在安卓开发中,MVP(Model-View-Presenter) 是一种常见的软件架构模式,它通过将应用程序的逻辑与用户界面分离,使得代码更加模块化、易于维护和测试。本文将详细讲解MVP模式的组成部分、工作流程、优点,并结合…...
基于MuJoCo物理引擎的机器人学习仿真框架robosuite
Robosuite 基于 MuJoCo 物理引擎,能支持多种机器人模型,提供丰富多样的任务场景,像基础的抓取、推物,精细的开门、拧瓶盖等操作。它可灵活配置多种传感器,提供本体、视觉、力 / 触觉等感知数据。因其对强化学习友好&am…...
配置管理CM
以下是关于项目管理中 配置管理 的详细解析,结合高项(如软考高级信息系统项目管理师)教材内容,从理论到实践进行系统阐述: 一、配置管理的基本概念 1. 定义 配置管理(Configuration Management, CM)是识别、记录、控制项目成果(产品、服务或过程)的物理和功能特征,…...
13.编码器的结构
从入门AI到手写Transformer-13.编码器的结构 13.编码器的结构代码 整理自视频 老袁不说话 。 13.编码器的结构 T r a n s f o r m e r E n c o d e r : 输入 [ b , n ] TransformerEncoder:输入[b,n] TransformerEncoder:输入[b,n] E m b e d d i n g : − > [ b , n , d ]…...
[原理分析]安卓15系统大升级:Doze打盹模式提速50%,续航大幅增强,省电提升率5%
技术原理:借鉴中国友商思路缩短进入Doze的时序 开发者米沙尔・拉赫曼(Mishaal Rahman)在其博文中透露,谷歌对安卓15系统进行了显著优化,使得设备进入“打盹模式”(Doze Mode)的速度提升了50%,并且部分机型的待机时间因此得以延长三小时。设备…...
cdp-(Chrome DevTools Protocol) browserscan检测原理逆向分析
https://www.browserscan.net/zh/bot-detection 首先,打开devtools后访问网址,检测结果网页显示红色Robot,标签插入位置,确定断点位置可以hook该方法,也可以使用插件等方式找到这个位置,本篇不讨论. Robot标签是通过insertBefore插入的. 再往上追栈可以发现一个32长度数组,里面…...
【Java面试笔记:基础】1.谈谈你对Java平台的理解?
前言 Java 是历史悠久且主流的编程语言,拥有庞大的开发者群体和广泛的应用领域。通过系统学习和实践,构建扎实的 Java 知识体系,提升面试成功率 笔记核心内容 1. Java 平台的核心特性 跨平台特性:Java 的核心特性之一是“Writ…...
Containerd与Docker的相爱相杀:容器运行时选型指南
容器运行时(Container Runtime)作为云原生基础设施的底层引擎,正从Docker一家独大走向多元化竞争。本文将深入剖析Containerd与Docker的技术血缘、性能差异及选型策略,揭示如何根据场景需求选择最优解。 一、技术血缘:…...
Java第五节:继承thread类创建线程
1、创建类Thread01 创建类Thread01然后继承thread类 2、重写run函数 3、运行线程 在主函数创建两个线程,并执行。...
vite安装及使用
没特殊要求的项目,还是怎么简单怎么来╮(╯▽╰)╭ 一、Vite 基础知识 1. 什么是 Vite? Vite 是一个前端构建工具,专注于开发服务器速度和优化构建过程。特点: 快速冷启动:利用 ES 模块的原生支持,实现快速的开发服务器启动。即时热更新:在开发过程中,修改代码后可以…...
Oracle expdp的 EXCLUDE 参数详解
Oracle expdp的 EXCLUDE 参数详解 EXCLUDE 是 Oracle Data Pump Export (expdp) 工具中的一个关键参数,用于指定在导出过程中要排除的对象或对象类型。 一、基本语法 expdp username/password DUMPFILEexport.dmp DIRECTORYdpump_dir EXCLUDEobject_type[:name_c…...
C#/.NET/.NET Core技术前沿周刊 | 第 35 期(2025年4.14-4.20)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…...
《MySQL:MySQL表的基本查询操作CRUD》
CRUD:Create(创建)、Retrieve(读取)、Update(更新)、Delete(删除)。 Create into 可以省略。 插入否则更新 由于主键或唯一键冲突而导致插入失败。 可以选择性的进行同步…...
CF2096F Wonderful Impostors
题解 看到题意很容易想到用双指针来维护所有可行的区间,但是显然不能对所有的 1 区间来维护所有的可行区间,这样的区间数量会太多,我们无法快速进行判断。 所以只能对满足答案的所有区间进行双指针,这就要求我们如何快速插入和删…...
多维度信息捕捉:利用向量、稀疏向量、全文搜索及张量实现RAG的极致性能
开源 AI 原生数据库 Infinity 0.2 release 正式发布,提供了 2 种新数据类型:稀疏向量Sparse Vector 和 张量Tensor,在此前的全文搜索和向量搜索之外, Infinity 提供了更多的召回手段,如下图所示,用户可以采…...
vscode使用remote ssh插件连接服务器的问题
本人今天发现自己的vscode使用remote ssh连接不上服务器了,表现是:始终在初始化 解决方法: 参考链接:vscode remote-ssh 连接失败的基本原理和优雅的解决方案 原因 vscode 的 SSH 之所以能够拥有比传统 SSH 更加强大的功能&a…...
基础版-图书管理系统
现在我们用面向对象编程,首先我们要明确这个图书管理系统的对象有哪些? 图书管理需要管理图书(对象1),在哪管理图书呢?书架(对象2)上 然后由谁来管呢?有两类人…...
【单片机 C语言】单片机学习过程中常见C库函数(学习笔记)
memset() C 标准库 - <string.h> string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。 <string.h> 是 C 标准库中的一个头文件,提供了一组用于处理字符串和内存块的函数。这些函数涵盖了字符串复制、连接、比较、搜索和内存操作…...
神经网络优化 - 小批量梯度下降之批量大小的选择
上一博文学习了小批量梯度下降在神经网络优化中的应用: 神经网络优化 - 小批量梯度下降-CSDN博客 在小批量梯度下降法中,批量大小(Batch Size)对网络优化的影响也非常大,本文我们来学习如何选择小批量梯度下降的批量大小。 一、批量大小的…...
Novartis诺华制药社招入职综合能力测评真题SHL题库考什么?
一、综合能力测试 诺华制药的入职测评中,综合能力测试是重要的一部分,主要考察应聘者的问题解决能力、数值计算能力和逻辑推理能力。测试总时长为46分钟,实际作答时间为36分钟,共24题。题型丰富多样,包括图形变换题、分…...
文件的物理结构和逻辑结构的区分
文件的物理结构和逻辑结构是文件系统中两个重要的概念,它们分别描述了文件在存储设备上的实际存储方式以及用户在编程或操作文件时所看到的抽象组织形式。理解这两者的区别和联系对于深入掌握文件系统的设计和实现至关重要。 一、文件的逻辑结构 定义 文件的逻…...
C语言学习记录(16)文件操作7
前面学的东西感觉都跟写代码有关系,怎么突然就开始说文件了,有什么用呢? 其实,文件是另一种数据存储的方式,学会使用文件就可以让我们的数据持久的保存。 一、文件是什么 就算没有学过相关的知识,在这么…...
Coze平台 创建AI智能体的详细步骤指南
一、创建智能体的基础流程 注册与登录 访问Coze官网(www.coze.cn),使用邮箱或手机号注册账号并登录。 创建智能体 在控制台点击左侧“”按钮,选择“创建智能体”,输入名称(如“职场鼓励师”&…...
《作用域大冒险:从闭包到内存泄漏的终极探索》
“爱自有天意,天有道自不会让有情人分离” 大家好,关于闭包问题其实实际上是js作用域的问题,那么js有几种作用域呢? 作用域类型关键字/场景作用域范围示例全局作用域var(无声明)整个程序var x 10;函数作用…...
android Stagefright框架
作为Android音视频开发人员,学习Stagefright框架需要结合理论、源码分析和实践验证。以下是系统化的学习路径: 1. 基础准备 熟悉Android多媒体体系 掌握MediaPlayer、MediaCodec、MediaExtractor等核心API的用法。 理解Android的OpenMAX IL(…...
Shell脚本-变量的分类
在Shell脚本编程中,变量是存储数据的基本单位。它们可以用来保存字符串、数字甚至是命令的输出结果。正确地定义和使用变量能够极大地提高脚本的灵活性与可维护性。本文将详细介绍Shell脚本中变量的不同分类及其应用场景,帮助你编写更高效、简洁的Shell脚…...
<C#>.NET WebAPI 的 FromBody ,FromForm ,FromServices等详细解释
在 .NET 8 Web API 中,[FromBody]、[FromForm]、[FromHeader]、[FromKeyedServices]、[FromQuery]、[FromRoute] 和 [FromServices] 这些都是用于绑定控制器动作方法参数的特性,下面为你详细解释这些特性。 1. [FromBody] 作用:从 HTTP 请求…...
