「这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战」。
哈喽大家好,我是阿Q!
在学习了前边的 swagger-ui 的相关内容之后呢,我们开始搭建 swagger 的注册中心。在继续往下学习之前先来张图感受下,便于大家的理解:
注册中心
项目源代码:
https://gitee.com/kdyzm/swagger-register-server
它是一个swagger注册中心,对swagger文档进行持久化并进行CRUD操作,最终在knife4j中展示。它应当包含如下功能
- 接收客户端传来的
swagger文档信息并保存到数据库 - 集成
knife4j并展示文档 - 提供
knife4j前端页面/swagger-resources接口逻辑实现 - 提供
knife4j前端页面获取文档详情接口 - 能够动态更新文档
表结构设计
设计上,用两张表分别存储group信息和文档详情信息
CREATE TABLE `group_info` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`name` varchar(64) NOT NULL COMMENT 'groupName',
`location` varchar(128) NOT NULL COMMENT 'location',
`version` varchar(16) NOT NULL COMMENT 'version',
`url` varchar(128) NOT NULL COMMENT 'url',
`app_name` varchar(64) DEFAULT NULL COMMENT '服务名(spring.application.name)',
`gateway` varchar(64) DEFAULT NULL COMMENT '网关,无则不填',
PRIMARY KEY (`id`),
UNIQUE KEY `group_info_name` (`name`) COMMENT 'group name唯一',
UNIQUE KEY `group_info_app_name` (`app_name`) COMMENT 'appname唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `swagger_json` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_name` varchar(64) NOT NULL,
`content` longtext NOT NULL COMMENT 'swagger具体信息',
PRIMARY KEY (`id`),
UNIQUE KEY `swagger_json_groupname` (`group_name`) COMMENT 'groupName唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
group_info表用于存储swagger的group信息,/swagger-resources接口将会从该表中取group数据
swagger_json表用于存储swagger的原始信息,用于文档渲染。
接收注册接口
swagger-register-server中SwaggerRegisterController的regist()方法
对应以上两个表,注册接口有两个实体类。注册逻辑是:存在则更新,不存在就新增,groupName和appName都要保持唯一。
获取swagger详情接口
swagger-register-server中SwaggerRegisterController的getSwaggerDetail()方法
默认值是/v2/api-docs,但是可以自定义,这里要求客户端在注册的时候就约定好接口路径是/swagger/detail。
该接口从数据库中获取
swagger信息。
获取resources列表接口
从之前的/swagger-resources源码分析过,想要从数据库自定义获取group列表,就需要重新实现SwaggerResourcesProvider接口并且标记为@Primary
swagger-register-server中DocumentationConfig
以上就是我们搭建的 swagger 注册中心的全部内容,接下来我们将要讲解如何搭建 swagger-starter 来完成客户端的搭建。
题外篇
阿Q将持续更新
java实战方面的文章,感兴趣的可以关注下公众号:阿Q说代码,也可以来技术群讨论问题呦,点赞之交值得深交!