微服务聚合文档技术实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微服务聚合文档技术实现方案
1.前言
随着时代的发现,我们的项目也从以前的,单节点项目(所有功能都向一个项目中堆,维护性差),最近几年,微服务使用的人群越越来越广,一个简单的电影系统,我们也可以按模块进行切换,例如,分为订单模块,电影模块,支付模块,会员模块等等。
而文档维护起来的成本也越来越高,有时候,我们一个系统,就可以拆分成上100个服务,这时,我们的文档如何维护了?假设,我们有100个服务,我们搭建100个swagger,那就得有100个网站,对于开发人员的文档维护,是非常繁琐的。针对这种情况,我们只能通过swagger聚合文档的方式来解决。
2.系统环境
3.微服务面临的挑战
2.1当前面临的问题
1) 文档需要更新的时候,需要再次发送一份给前端,也就是文档更新交流不及时。
2) 接口返回结果不明确
3) 不能直接在线测试接口,通常需要使用工具,比如postman
4) 接口文档太多,不好管理
5) 接口文档与对应代码匹配不上,导致接口文档基本无用。
6) 对于有较多微服务的系统来说,一个服务一个文档地址,麻烦且不方便管理
由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型、HTTP头部信息、HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下游的抱怨声不绝于耳。
随着时间推移,不断修改接口实现的时候都必须同步修改接口文档,而文档与代码又处于两个不同的媒介,除非有严格的管理机制,不然很容易导致不一致现象。
2.2 swagger介绍
为了解决上面这样的问题,本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot和微服务当中,并与Spring MVC程序配合组织出强大RESTful API文档。它既可以减少我们
创建文档的工作量,同时说明内容又整合入实现代码中,让维护文档和修改代码整合为一体,可以让我们在修改代码逻辑的同时方便的修改文档说明。另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API。
2.2swagger的不足
Swagger作为接口文档工具接入springboot工程很方便,只需一个starter,一个configuration就可集成完毕。
但是对于有较多微服务的系统来说,一个服务一个文档地址,便会觉得比较麻烦。有没有什么好的办法可以都把他们集中起来?
这时候聚合文档的解决方案出现了,将所有的微服务地址以swagger分组的形式展现,切换分组的时候就相当于直接切换了整个微服务。
4.技术架构
5.功能特点
3.1文档聚合效果
点击图中所示下拉选,可切换不同服务模块的api文档
点击权限设置菜单,可查询该api的请求示例、请求参数、响应状态、响应参数、响应示例信息。
点击调试,可根据提供的请求参数说明,发送对应的请求
3.2 swagger聚合文档技术选型
目前采用:swagger2技术+ swagger-bootstrap-ui技术(页面增强型)
3.2.1 swagger2技术
3.2.1.1 swagger生态图
3.2.1.2 swagger2介绍
Swagger是一款让你更好的书写API文档的规范且完整框架,提供描述、生产、消费和可视化RESTful API。是由庞大工具集合支撑的形式化规范。这个集合涵盖了从终端用户接口、底层代码库到商业API管理的方方面面。
通过代码和注释自动生成文档。在Swagger框架下,开发人员可对服务进行归类说明,对方法,模型,返回结果等进行详细说明。方便开发人员在编写代码的同时,编写文档信息。自动生成,只需很少的编辑工作,就能获得完整的REST APIs文档。
3.2.2 swagger-bootstrap-ui技术
3.2.2.1 swagger-bootstrap-ui简介
swagger-bootstrap-ui是springfox-swagger的增强UI实现,为Java开发者在使用Swagger的时候,能拥有一份简洁、强大的接口文档体验。
3.2.2.2 核心功能
该UI增强包主要包括两大核心功能:文档说明和在线调试。
文档说明:根据Swagger的规范说明,详细列出接口文档的说明,包括接口地址、类型、请求示例、请求参数、响应示例、响应参数、响应码等信息,使用swagger-bootstrap-ui能根据该文档说明,对该接口的使用情况一目了然。
在线调试:提供在线接口联调的强大功能,自动解析当前接口参数,同时包含表单验证,调用参数可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息,帮助开发者在线调试,而不必通过其他测试工具测试接口是否正确,简介、强大。
3.2.2.3 swagger-bootstrap-ui与官方swagger-ui的区别
每一个增强的功能都是贴合实际,考虑到开发者的实际开发需要,是必不可少的功能,主要包括:
个性化配置:通过个性化ui配置项,可自定义UI的相关显示信息
离线文档:根据标准规范,生成的在线markdown离线文档,开发者可以进行拷贝生成markdown接口文档,通过其他第三方markdown转换工具转换成html或pdf,这样也可以放弃swagger2markdown组件
接口排序:自1.8.5后,ui支持了接口排序功能,例如一个注册功能主要包含了多个步骤,可以根据swagger-bootstrap-ui提供的接口排序规则实现接口的排序,step化接口操作,方便其他开发者进行接口对接
3.2.2.4 UI特点
●以markdown形式展示文档,将文档的请求地址、类型、请求参数、示例、响应参数分层次依次展示,
接口文档一目了然,方便开发者对接
●在线调试栏除了自动解析参数外,针对必填项着颜色区分,同时支持tab键快速输入上下切换.调试时
可自定义Content-Type请求头类型
●个性化配置项,支持接口地址、接口description属性、UI增强等个性化配置功能
●接口排序,支持分组及接口的排序功能
●支持markdown文档离线文档导出,也可在线查看离线文档
●调试信息全局缓存,页面刷新后依然存在,方便开发者调试
●以更人性化的treetable组件展示Swagger Models功能
●响应内容可全屏查看,针对响应内容很多的情况下,全屏查看,方便调试、复制
●文档以多tab方式可显示多个接口文档
●请求参数栏请求类型、是否必填着颜色区分
●主页中粗略统计接口不同类型数量
●支持接口在线搜索功能
●左右菜单和内容页可自由拖动宽度
●支持自定义全局参数功能,主页包括header及query两种类型
●i18n国际化支持,目前支持:中文简体、中文繁体、英文
●JSR-303 annotations 注解的支持