NestJS-Knife4j

news2025/4/22 14:34:38

文章目录

  • 前言
    • ✅ 一、什么是 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 对比

特性SwaggerKnife4j
界面基本的 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);

  // 配置 Knife4j
  app.use('/doc', Knife4jModule.setup(document, app));

  await app.listen(3000);
}

bootstrap();

3. 启动应用并访问接口文档

  • 启动项目后,可以访问以下两个路径:
    • Swaggerhttp://localhost:3000/api-docs
      在这里插入图片描述

    • Knife4jhttp://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 风格的接口展示,让开发者和接口使用者能够更清晰地看到接口的设计。

✅ 五、总结

功能SwaggerKnife4j
界面美观度较为简洁,基础功能美化过的界面,支持更多交互
接口分组基本支持强大的接口分组,支持更精细化的组织方式
API 请求示例基本支持提供完整的请求/响应示例,增强 API 文档体验
性能普通更好的性能,加载速度更快
集成方式基础的集成方式通过 nestjs-knife4j 快速集成,UI 功能丰富

Knife4j 在 Swagger 基础上提供了更多的功能,优化了界面的美观和交互,适合需要更丰富接口文档的团队,特别是在大型企业应用中,它能显著提升开发者和 API 使用者的体验。

如果你已经在项目中使用了 Swagger,集成 Knife4j 将会是一个很好的提升,特别是在需要优化 API 文档展示、增强协作时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2340165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【项目管理】成本类计算 笔记

项目管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应&…

基于MuJoCo物理引擎的机器人学习仿真框架robosuite

Robosuite 基于 MuJoCo 物理引擎,能支持多种机器人模型,提供丰富多样的任务场景,像基础的抓取、推物,精细的开门、拧瓶盖等操作。它可灵活配置多种传感器,提供本体、视觉、力 / 触觉等感知数据。因其对强化学习友好&am…

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…

Java第五节:继承thread类创建线程

1、创建类Thread01 创建类Thread01然后继承thread类 2、重写run函数 3、运行线程 在主函数创建两个线程,并执行。

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 可以省略。 插入否则更新 由于主键或唯一键冲突而导致插入失败。 可以选择性的进行同步…

多维度信息捕捉:利用向量、稀疏向量、全文搜索及张量实现RAG的极致性能

开源 AI 原生数据库 Infinity 0.2 release 正式发布,提供了 2 种新数据类型:稀疏向量Sparse Vector 和 张量Tensor,在此前的全文搜索和向量搜索之外, Infinity 提供了更多的召回手段,如下图所示,用户可以采…

vscode使用remote ssh插件连接服务器的问题

本人今天发现自己的vscode使用remote ssh连接不上服务器了,表现是:始终在初始化 解决方法: 参考链接:vscode remote-ssh 连接失败的基本原理和优雅的解决方案 原因 vscode 的 SSH 之所以能够拥有比传统 SSH 更加强大的功能&a…

神经网络优化 - 小批量梯度下降之批量大小的选择

上一博文学习了小批量梯度下降在神经网络优化中的应用: 神经网络优化 - 小批量梯度下降-CSDN博客 在小批量梯度下降法中,批量大小(Batch Size)对网络优化的影响也非常大,本文我们来学习如何选择小批量梯度下降的批量大小。 一、批量大小的…

Novartis诺华制药社招入职综合能力测评真题SHL题库考什么?

一、综合能力测试 诺华制药的入职测评中,综合能力测试是重要的一部分,主要考察应聘者的问题解决能力、数值计算能力和逻辑推理能力。测试总时长为46分钟,实际作答时间为36分钟,共24题。题型丰富多样,包括图形变换题、分…

C语言学习记录(16)文件操作7

前面学的东西感觉都跟写代码有关系,怎么突然就开始说文件了,有什么用呢? 其实,文件是另一种数据存储的方式,学会使用文件就可以让我们的数据持久的保存。 一、文件是什么 就算没有学过相关的知识,在这么…

《作用域大冒险:从闭包到内存泄漏的终极探索》

“爱自有天意,天有道自不会让有情人分离” 大家好,关于闭包问题其实实际上是js作用域的问题,那么js有几种作用域呢? 作用域类型关键字/场景作用域范围示例全局作用域var(无声明)整个程序var x 10;函数作用…

让数据应用更简单:Streamlit与Gradio的比较与联系

在数据科学与机器学习的快速发展中,如何快速构建可视化应用成为了许多工程师和数据科学家的一个重要需求。Streamlit和Gradio是两款备受欢迎的开源库,它们各自提供了便捷的方式来构建基于Web的应用。虽然二者在功能上有许多相似之处,但它们的…

LlamaIndex 生成的本地索引文件和文件夹详解

LlamaIndex 生成的本地索引文件和文件夹详解 LlamaIndex 在生成本地索引时会创建一个 storage 文件夹,并在其中生成多个 JSON 文件。以下是每个文件的详细解释: 1. storage 文件夹结构 1.1 docstore.json 功能:存储文档内容及其相关信息。…

AndroidRom定制删除Settings某些菜单选项

AndroidRom定制删除Settings某些菜单选项 1.前言. 最近在Rom开发中需要隐藏设置中的某些菜单,launcher3中的定制开发,这个属于很基本的定制需求,和隐藏google搜素栏一样简单,这里我就不展开了,直接上代码. 2.隐藏网络…

【数据结构和算法】3. 排序算法

本文根据 数据结构和算法入门 视频记录 文章目录 1. 排序算法2. 插入排序 Insertion Sort2.1 概念2.2 具体步骤2.3 Java 实现2.4 复杂度分析 3. 快排 QuickSort3.1 概念3.2 具体步骤3.3 Java实现3.4 复杂度分析 4. 归并排序 MergeSort4.1 概念4.2 递归具体步骤4.3 Java实现4.4…

FreeRTos学习记录--2.内存管理

后续的章节涉及这些内核对象:task、queue、semaphores和event group等。为了让FreeRTOS更容易使用,这些内核对象一般都是动态分配:用到时分配,不使用时释放。使用内存的动态管理功能,简化了程序设计:不再需…