零碎02-接口文档管理

目录

一、背景故事

二、解决方案分析

1. 静态文档方案

2. Swagger + Springfox

3. Knife4j增强方案

三、示例

1. 添加依赖

2. 配置Knife4j

3. 创建knife4j配置类

4. 启动Spring Boot项目并访问接口文档

5. 使用示例

6. 测试和使用

四、总结


一、背景故事

        酷乐是一名技术栈不详、遇强则强的程序员。他在公司负责开发某个核心系统模块,常常面临接口文档管理的困扰。项目的开发人员和测试人员为了确保系统功能实现和测试验证,一直依赖接口文档来进行协作。然而,由于系统复杂度不断增加,接口文档不仅繁杂而且容易遗漏更新,测试人员和开发人员经常出现接口信息不一致的情况,这导致接口调试变得低效且费时。为了解决这个问题,酷乐决定改进公司接口文档的展示和管理方式,以便提高开发和测试的协同效率。


二、解决方案分析

在寻找高效的接口文档管理方式时,酷乐尝试了多种方案,每一次改进都带来了体验上的提升。

1. 静态文档方案
  • 初期方案:团队使用Markdown或Excel等静态文档来记录接口信息。每次接口有变更时,文档需要手动更新,随着项目接口数量的增加,接口文档内容逐渐变得杂乱无章。

  • 问题分析:静态文档的更新依赖人工,容易因疏漏导致文档与实际代码不符,且内容缺乏实时性,无法满足多人协作的需求。

  • 小结:静态文档适用于早期的原型设计和接口定义,但在复杂项目中维护成本过高。

2. Swagger + Springfox
  • 中期方案:酷乐团队决定使用Swagger生成接口文档,结合Springfox插件在Spring Boot项目中展示。Swagger根据代码注解自动生成文档,确保文档与接口保持一致。团队成员可以直接通过Swagger UI查看接口信息,无需手动编写。

  • 使用方式:在接口代码中添加@Api@ApiOperation等注解,Swagger可以生成接口的详细描述、参数和返回值示例。Swagger UI自动生成的页面简洁易用,接口变更会实时更新到文档。

  • 优缺点:Swagger解决了文档一致性的问题,但Swagger UI界面较为简单,展示效果有限,难以满足复杂接口的使用需求。

3. Knife4j增强方案
  • 现行方案:为进一步提升接口文档的易用性,酷乐引入了Knife4j。Knife4j是在Swagger基础上的增强工具,提供了更为友好的界面和功能,如接口分组、参数样例展示、全局参数配置等功能,提升了用户体验。

  • 示例分析:在Spring Boot项目中集成Knife4j,只需引入knife4j-spring-boot-starter依赖,并在application.yml中进行简单配置,就可以直接生成具有分组和样例展示的接口文档。测试人员可以快速查找到需要的接口,开发人员也能方便地调试和验证接口。

  • 实际效果:Knife4j的增强UI界面使得接口文档更具可读性,同时也支持团队自定义文档结构。基于Knife4j的文档生成不仅提升了开发效率,还使接口文档展示更专业、直观,受到团队一致好评。


三、示例

在Spring Boot项目中接入Knife4j可以方便地生成接口文档,供开发人员和测试人员查看和使用。Knife4j是在Swagger基础上进行扩展的工具,提供了更友好的UI和一些增强功能。以下是如何集成Knife4j的步骤:

1. 添加依赖

pom.xml中添加Knife4j的依赖。

springboot升级到3后之前的knife4j配置就要变了一下了。

<dependencies><!-- springframework --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.4</version></dependency>
​<!-- Knife4j依赖 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.3.0</version></dependency>
</dependencies>
2. 配置Knife4j

在Spring Boot的配置文件application.yml中添加Knife4j的相关配置:

server:port: 8088
​
spring:application:name: demo-application
​
# knife4j的增强配置,不需要增强可以不配
knife4j:enable: true  # 是否启用Knife4j界面setting:language: zh_cn
3. 创建knife4j配置类

src/main/java目录下新建一个配置类,用于配置knife4j的基本信息。

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
​
/*** Knife4j configuration*/
@Configuration
public class Knife4jConfig {
​@Beanpublic OpenAPI customOpenAPI() {return new OpenAPI()// 接口文档标题.info(new Info().title("API文档").description("Spring Boot Knife4j API").version("1.0.0").contact(new Contact().name("Kule").url("https://lwer.site").email("958514155@qq.com"))); // 接口文档版本}
}
4. 启动Spring Boot项目并访问接口文档

启动Spring Boot项目后,可以在浏览器中访问以下URL来查看生成的接口文档:

  • 访问Knife4j UI页面:http://localhost:8088/doc.html

    讲个笑话:我多加了一个spring-boot-starter-security的依赖,访问就会跳转/login登录,以为是yaml配置里开启了knife4j的密码登录:

    knife4j:enable: truesetting:language: zh_cnbasic:enable: true  #进入界面是否需要账号密码username: adminpassword: 123456

实际是:spring-boot-starter-security需要同时配合knife4j的账号密码。要么两者都不加,免密登录。

5. 使用示例

通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:

注解说明
@Tag用于说明或定义的标签
@Operation用在类上,描述API操作的元数据信息,例如Controller,表示对类的说明
@Schema用于描述实体类属性的描述、示例、验证规则等,比如POJO类及属性
@Parameter加粗样式用于描述 API 操作中的参数,对HTTP请求参数进行描述
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
​
@Tag(name = "Hello")
@RestController
@RequestMapping("/api/demo")
public class HelloController {@GetMapping("/hello")@Operation(summary = "Say hello")public String hello() {return "Hello World!";}
}
6. 测试和使用

通过访问http://localhost:8088/doc.html即可看到基于Knife4j生成的界面。此界面可以方便地测试接口、查看接口详情等,非常适合日常的开发和测试需求。

四、总结

在解决接口文档展示的问题上,通过使用Knife4j展示接口文档,团队实现了接口定义与文档的一致性、实时更新和更优展示效果,有效解决了接口开发和测试中的协同问题。这一过程也体现了在快速发展的技术环境中,工具的迭代创新如何帮助技术团队更高效地协作与交付。

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

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

相关文章

指标体系构建:如何设计北极星指标设计?

目录 1 北极星指标的作用 2 北极星指标设计标准 标准1 标准2 标准3 标准4 标准5 标准6 3 小结 1 北极星指标的作用 北极星指标是公司业务成功的关键指标&#xff0c;反映了公司为用户带来的价值&#xff0c;有以下3点作用&#xff1a; ● 像北极星一样&#xff0c…

三菱FX5UPLC以太网Socket通信功能Passive开放的程序示例

Passive开放的通信流程如下所示。 参数设置 示例程序中使用的参数设置如下所示。 [CPU模块】 导航窗口↔[参数]↔[模块型号]↔[模块参数]-[以太网端口]-[基本设置]-[对象设备连接配置设置]↔[详细设置]→[以太网配置(内置以太网端口)]画面 【以太网模块】 [导航]中「参数]→[模…

【MATLAB源码-第292期】基于matlab的4ASK调制解调窄带通信系统仿真,输出各节点波形图以及误码率曲线图。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 窄带通信系统是指带宽较小、频谱利用效率较低的通信系统。与宽带通信系统相比&#xff0c;窄带系统的特点是信号的带宽相对较窄&#xff0c;因此需要更精确的调制技术来实现有效的通信。在窄带通信中&#xff0c;常见的调制方…

【搜索结构】AVL树的学习与实现

目录 什么是AVL树 AVL树的定义 插入函数的实现 左单旋和右单旋 左右双旋与右左双旋 什么是AVL树 AVL树实际上就是二叉搜索树的一种变体&#xff0c;我们都知道二i叉搜索树可以将查找的时间复杂度提升到O(logn)&#xff0c;极大提升搜索效率。但是在极端情况下&#xff0c;当…

【专题】2024年中国消费者消费意愿调查报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p38242 当今时代&#xff0c;经济社会多元发展&#xff0c;消费市场复杂多变。消费者的行为、需求和支出意愿不断演变&#xff0c;深刻影响着各个领域的发展。家庭余钱的用途反映出消费者在储蓄、教育、医疗等方面的考量。在消费领域…

推荐一款游戏玩家性能优化工具:Razer Cortex

Razer Cortex是一款专为游戏玩家设计的性能优化工具&#xff0c;它旨在提升玩家的游戏体验。通过该软件&#xff0c;用户可以优化 PC 性能&#xff0c;从而提高游戏的流畅度&#xff0c;减少延迟并增强视觉效果&#xff0c;尤其在需要精准操作的游戏中&#xff0c;流畅的画面和…

人工智能(AI)对于电商行业的变革和意义

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/402a907e12694df5a34f8f266385f3d2.png#pic_center> &#x1f393;作者简介&#xff1a;全栈领域优质创作者 &#x1f310;个人主页&#xff1a;百锦再新空间代码工作室 &#x1f4de;工作室&#xff1a;新空间代…

1435:【例题3】曲线 一本通 代替三分

1435&#xff1a;【例题3】曲线 题目来源&#xff1a;一本通oj链接 代替三分 题意 给出t组数据&#xff0c;每组里面有n个函数&#xff0c;求出t组数据的函数的最小值 思路 函数是二次函数&#xff0c;具有单峰性&#xff0c;利用左右两边单调性的原理可以进行答案三分处…

英伟达Isaac Manipulator产品体验

相关配置 Isaac Manipulator3.1.0Isaac Sim4.2.0Ubuntu20.04GPURTX 4090 LaptopCPUI9 13900HXMem64GB 过程记录与反馈 GPU加速效果 请描述您在使用Isaac Manipulator时&#xff0c;调用cuMotion加速库来进行机器人运动规划和轨迹优化等任务的步骤和过程&#xff0c;并记录任…

“非法”操控lambda(python)

能过python解释器关卡即是合法脚本代码&#xff0c;偶尔的“违规”操控也是一种唯美。 (笔记模板由python脚本于2024年11月13日 11:18:21创建&#xff0c;本篇笔记适合熟悉python的lambda操控的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.pyth…

[ 网络安全介绍 5 ] 为什么要学习网络安全?

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

java八股笔记-1-java基础

java 特点&#xff1a; 1.平台无关性&#xff0c;java 的字节码文件可以在任何安装了 JVM 的系统上运行 2.面相对象&#xff0c;几乎一切都可以抽象为对象&#xff0c;包括类&#xff0c;对象&#xff0c;继承&#xff0c;封装&#xff0c;多态&#xff0c;抽象 抽象&#xf…

Java入门16——接口

我们今天来学习接口&#xff0c;和继承有点像&#xff0c;话不多说&#xff0c;开始正题~ 一、接口 1.为什么要用接口 接口其实和继承很像&#xff0c;但是继承是 is-a 的关系&#xff0c;接口是 has-a 的关系&#xff0c;而且继承只能是一对一的关系&#xff0c;但是接口可以…

Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行串扰分析操作指导-trace耦合

Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行串扰分析操作指导-trace 耦合 Sigrity Power SI Power Ground Noise Simulation模式可以用来分析信号间的串扰,以下图为例 2D视图

地下水数值模拟软件Visual modflow Flex实践技术应用

专题一 地下水数值软件的操作流程、建模步骤和所需资料处理及相关注意事项 [1] Visual MODFLOW Flex特征 [2] Visual MODFLOW Flex软件界面及模块 [3] 地下水数值模拟的建模步骤及数据需求 专题二 模型建模操作方法 技巧、真实案例演练、特殊问题处理[1] 直接模型建模的操作方法…

保险、银行等金融行业都在做的“双录”是什么?电子签约如何实现

“双录”也就是同步录音、录像&#xff0c;是指在特定的业务场景中通过录音和录像的方式来记录相关业务过程中的关键环节和重要内容&#xff0c;帮助确定业务办理人真实身份和意愿、实现业务过程可回溯管理。 起初&#xff0c;双录主要用于保险销售&#xff0c;后来逐步扩展到…

总结拓展十五:特殊采购业务——寄售采购

1、寄售采购的定义 寄售采购是指供应商提供物料&#xff0c;并将它们存储在你处&#xff0c;在贵公司将这些物料从寄售库存提取&#xff08;转自有&#xff09;之前&#xff0c;该供应商一直是这些物料法律上的所有者。只有当这些物料被贵司转自有领用后&#xff0c;供应商才会…

python 同时控制多部手机

在这个智能时代,我们的手机早已成为生活和工作中不可或缺的工具。无论是管理多个社交媒体账号,还是处理多台设备上的事务,如何更高效地控制多个手机成为了每个人的痛点。 今天带来的这个的软件为你提供了一键控制多部手机的强大功能。无论是办公、娱乐,还是社交,你都能通过…

c++:string(一)

文章目录 一string类1C语言中的字符串2C中的string二遍历1[ ]2迭代器3const迭代器4范围for5auto6总结三String的尾插1size和length2max_size,capacity和clear3访问接口4尾插字符和字符串5 append的重载三string的扩容问题&#xff08;1&#xff09;怎么扩容&#xff08;2&#…

如何从数字化迈向智能化的跨越,重塑企业合同管理的未来

随着信息技术的快速发展&#xff0c;越来越多的企业开始认识到合同管理的重要性&#xff0c;并纷纷实施数字化战略以提高管理效率和降低运营成本。然而&#xff0c;仅仅实现合同管理的数字化还远远不够&#xff0c;真正的转型应该是向智能化迈进。本文将通过一个实际案例来探讨…