借老系统重构我准备写个迷你版apiFox

前段时间一直在忙公司老系统重构的方案设计,其中最大的重构点就是前后端分离。为了加快前后端协同开发和对接的工作效率,我决定写一个公司内部使用的迷你版的apiFox。

文章目录

    • 有现成的工具为啥不用
    • 现有成熟方案
    • 初步成果展示
    • 下一步计划

有现成的工具为啥不用

apiFox这样的API文档集成开发工具,功能强大又繁杂。作为企业使用,比较关注的几个重点:

  1. API的定义规范统一

    大家都遵循一套规范,最好是业界公认的。有了这样的API接口定义规范,自然市面上大部分厂商都会去实现这套规范开发出一些好用的插件和工具。从而面向市面公认规范的开发出来的工具才有普及性以及各种底层工具的支撑。因此选规范,远比选工具重要

  2. 支持反向生成和部署代码

    这也应该是企业协同开发最关心的:一处维护,到处使用这就要求,基于一套定义,可以反向生成各种主流编码语言的代码,经过相关工具的编译、打包和发布流程,把API调用包和定义包部署起来。实现自己调用自己,左右互搏,那前端妹纸和后端码男就都成了吃瓜群众,再也没有那么多鸡毛蒜皮的羁绊了。都从对接方沦为了看客。

  3. 为软件开发、维护整个生命周期保驾护航,一体化流程

    既然沦为了“看客”,这一点功能是很有必要的。因为好的产品设计的简单,通吃各类人群,咱们的API工具不光开发、测试人员,前线的产品、运维人员都用的溜,由他们发起API变更,再经过审核,实现一键部署。这就要求产品具备人性化的API变更提醒和变更历史追溯,以确保开发人员及时投入“战斗”,仅关注于业务逻辑层的开发,加速软件整个生命周期的良好运转。

现有成熟方案

基于以上几点的考虑,还是决定自研一套企业内API接口文档协同工具,关注核心特性的实现以解放人力和生产力,姑且就叫它“APIFox迷你版”吧。前面说的业界统一的API定义规范是swagger官方搞出来的Open API Specification,简称oas。原先swagger是做框架层的工具的,提供项目依赖,实现代码注解,进而在运行时产出文档数据来形成文档。这种代码主导文档的方式,一度成为开发人员编码的负担。后来swagger官方反其道而行之,不再受限于工具,自己主导制定了oas规范。有了这套规范,别的厂商来实现相关工具,而它自己也开发出了oas生态的Swagger Hub,实现了天龙人的API一站式管理平台。而它的贡献也惠及平民众生,发布了让开发人员卸下沉重负担的Swagger Codegen代码生成器。据说这里有个小插曲,从该工具3.0发布开始,团队内部对产品开发方向产生分歧,引申出一条新的开发分支,也就是现在用的更多的OpenAPI Generator。另外,集成开发产品行业翘楚JetBrains也推出了基于oas定义所见即所得的Open API插件,让我们的API开发如虎添翼,直接起飞。

初步成果展示

要写一个能得到团队内部认可和被广泛使用的IT产品,绝非一朝一夕。先迈出这一步,就会发现路越走越宽。即便长时间还在山脚下仰望。现在初步完成的成果如下:

在这里插入图片描述

可以基于oas3的最新3.1.0规范扩展出一个定制版本的API生成器,能基于一份扩展的yaml格式的定义文件,来生成较为完美的DTO类和API接口;同时这份定义文件也能被ideaOpenAPI插件所应用以支持离线swagger文档查看和本地API调用和调试。在这个过程中,自己付出很多努力,对最新发布的Swagger Codegen生成器源码做了一个缺陷的修复和功能定制扩展的二次开发。涉及到这些包的源码二开:

在这里插入图片描述

具体内容见后续的录频演示。

下一步计划

现在的API定义还是写在一个文件中的,随着API接口模块的增多,这个文件将会变得非常臃肿。我们将通用的定义形式进行模型化处理,设计出一套数据库表结构来出存储,第一版先不引入版本的概念,后续慢慢一步步迭代。oas定义文件将按照选定的API模块使用freemarker模板来动态生成,以临时文件的形式,交给生成器执行生成目标代码。

后续将进一步使用element plusUI库来搭建简洁大气的webAPI维护界面,并通过gradle自定义插件的形式完成API制品包的生成和安装发布,以提供给项目通过依赖的形式集成进来。

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

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

相关文章

Kafka+PostgreSql,构建一个总线服务

之前开发的系统,用到了RabbitMQ和SQL Server作为总线服务的传输层和存储层,最近一直在看Kafka和PostgreSql相关的知识,想着是不是可以把服务总线的技术栈切换到这个上面。今天花了点时间试了试,过程还是比较顺利的,后续…

华为CNA VRM搭建(使用vmware worfstartion搭建)

创建虚拟机: 自定义→高级 选择硬件兼容性:默认安装版本,如果未来想要将此虚拟机安装到其他电脑,其他电脑版本过低,此时可以向下兼容,这里我们默认版本 稍后安装操作系统: CNA采用Euler OS系统…

MySQL练手题--体育馆的人流量(困难)

一、准备工作 Create table If Not Exists Stadium (id int, visit_date DATE NULL, people int); Truncate table Stadium; insert into Stadium (id, visit_date, people) values (1, 2017-01-01, 10); insert into Stadium (id, visit_date, people) values (2, 2017-01-02…

springboot luttuc redis 集成protobuf,手动序列化反序列化

前置需知: 1.本文章和网上大部分博客配置不太一样,各位看官要分析一下自己的需求。集成protobuf 本文章主要是手动调用protobuf的序列化方法,而不是交由springboot 去做,会偏向原生java 使用方式 2.由于为了和公司其他的项目达成…

HTML + CSS - 网页布局之一般布局浮动布局

1. 一般布局 1.1 一般布局相关参数 元素内容常常可以想像为放在一个盒子里,然后在周边加上内边距,边框和外边距,是盒子模型 默认一个块级区域会填充父类所有的行向空间,并且沿着块伸长容纳其内容,可以为块状体设置某…

实习项目|苍穹外卖|day10

Spring Task cron 表达式 入门案例 订单状态定时处理 通知用户支付!通知商家完成订单! Scheduled(cron "0 0/1 * * * ? ")public void processTimeoutOrder(){log.info("定时处理超时订单: {}", LocalDateTime.now());//答案是…

Stable Diffusion AI算法,实现一键式后期处理与图像修复魔法

在当今数字影像时代,后期处理技术已成为将原始图像转化为视觉上令人惊叹艺术作品的点睛之笔。随着人工智能技术的飞速发展,尤其是Stable Diffusion技术在图像处理领域的应用,图片后期处理已达到前所未有的高度,为摄影师、设计师及…

【STM32 HAL库】IIC通信与CubeMX配置

【STM32 HAL库】IIC通信与CubeMX配置 前言理论IIC总线时序图IIC写数据IIC读数据 轮询模式CubeMX配置应用示例AHT20初始化初始化函数读取说明读取函数 中断模式CubeMX配置状态机图fsm.caht20.c DMA模式CubeMX配置代码 前言 本文为笔者学习 IIC 通信的总结,基于keysk…

如何进行数字化基础设施的构建呢?

数字化基础设施的构建是一个复杂而系统的过程,它涉及多个方面和层次的建设。以下是一个详细的构建步骤和关键点: 一、明确建设目标和需求 战略规划:结合企业的长期发展目标,明确数字化基础设施建设的总体方向和具体目标。需求分析…

LabVIEW中AVI帧转图像数据

在LabVIEW中,有时需要将AVI视频文件的帧转换为图像数据进行进一步处理。下面详细讲解了如何从AVI视频提取单帧并将其转换为图像数据集群,以便与其他图像处理VI兼容。 问题背景: 用户已经拥有能够处理JPEG图像数据集群的VI,现在希…

房产销售系统:SpringBoot技术应用案例

第二章关键技术的研究 2.1相关技术 房产销售系统是在Java MySQL开发环境的基础上开发的。Java是一种服务器端脚本语言,易于学习,实用且面向用户。全球超过35%的Java驱动的互联网站点使用Java。MySQL是一个数据库管理系统,因为它的…

学习大数据DAY58 增量抽取数据表

作业 1 SQL 优化的常见写法有哪些 - 面试经常被问 使用索引:合理创建和使用索引是提高查询效率的关键。索引可以加速数据的检 索速度,但是索引也会占用额外的存储空间,并且在插入、删除和更新操作时会 有额外的开销。 避免全表扫描&…

线段树介绍及线段树的使用场景

1.线段树用来解决什么问题 假如说你有一个数组,数组下标为 0-1000,然后对外提供一些方法, 1.1比如说你对外提供add方法,add方法(1,200,6),请你把从1 到 200 位置所有的值 加上6 1.2更新&…

Qt与MQTT交互通信

MQTT全称是(Message Queuing Telemetry Transport),即消息队列遥测传输协议 是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,并且该协议构建于TCP/IP协议之上,常用于互联网中&am…

Zabbix自定义监控项与触发器

当我们需要获取某台主机上的数据时,直接利用 zabbix 提供的模板可以很方便的获得需要的数据,但是有些特别的数据,利用这些现有的模板或监控项是无法实现的,例如网站状态信息的监控、mysql数据库主从状态等信息。这是就需要自己定义键值和监控…

【Unity】在Unity 3D中使用Spine开发2D动画

文章目录 内容概括前言下载安装 Spine Pro导入Unity插件Spine动画导入Unity使用展现动画效果展现 内容概括 本文主要讲解 Spine Pro 免(破)费(解)版的安装,以及如何将动画导入到Unity中使用。 前言 通常要用 Spine …

基于鸿蒙API10的RTSP播放器(七:亮度调节功能测试)

目标: 当我的手指在设备左方进行上下移动的时候,可以进行屏幕亮度的调节,在调节的同时,有实时的调节进度条显示 步骤: 界面逻辑:使用Stack() 组件,完成音量图标和进度条的组合显示&#xff0c…

Unity 粒子系统参数说明

一、Particle System 1. Duration(持续时间) 粒子系统运行一次所需的时间。它决定粒子系统持续播放的时间长度。 2. Looping(循环播放) 如果启用,粒子系统将在播放完一次后自动重新开始播放,直到你停止它…

3. 进阶指南:自定义 Prompt 提升大模型解题能力

怎么判断 Prompt 的好坏,有什么问题有着标准答案么? 答:让大模型求解数学问题。 李宏毅老师的 HW4 正好提到了有关数学问题的 Prompt,所以我决定中间插一篇这样的文章。通过本文你将: 了解各种 Prompt 如何影响大型语言…

javase复习day22泛型、set、数据结构

泛型 package MyGenerics;import java.util.ArrayList; import java.util.Iterator;public class GenericsTest1 {public static void main(String[] args) {//没有泛型的情况ArrayList list new ArrayList();//所有数据都被认为是Object类型,都可以加入集合中list…