一般微服务中会牵扯到多个服务如:
1.用户服务
2.认证服务
3...
那么这在生成swagge api的时候就会多个地址.导致app那边很分散,有没有一种很好的手段将多个聚合到一个地址里面?
我觉得可以这样做
这个纯粹依靠前端肯定不行了,需要写一个后台辅助的jar,或者SpringBoot的starter组件也行
这个starter提供对外的各个微服务的接口组合,开发者可以通过配置文件配置好各个服务的请求ip和port
因为各个微服务的swagger提供的api接口都是统一的,一个分组接口swagger-resource,一个详情接口,/v2/api-docs
此时,starter组件提供一个controller,根据配置的各个微服务ip和port,请求生成swagger响应的json
此时,提供一个统一的界面,将该接口的参数,通过swagger分组的方式,分别展示所有微服务的分组接口,开发者就可以根据分组选择,展示文档接口了
不管开发者访问那个微服务的文档界面,该微服务只要通过该Starter组件注册了相关微服务模块的ip以及端口,最终看到的都是整个系统所有的接口信息,然后根据分组,选择不同的微服务文档
这样应该是可行的.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
这个SpringBoot的starter组件最终也会和springfox-swagger组件一样,提供两个接口
1.分组接口(/swagger-paths)
该接口将starter配置的所有微服务集合汇集在一起,请求各个微服务的swagger-resources接口,组合起来,最终响应出去json,比如下面:
[
{
"name": "用户服务",
"host":"192.168.0.100",
"port":8080
"url": "/swagger-info",
"groupname":"用户服务分组1"
},
{
"name": "用户服务",
"host":"192.168.0.100",
"port":8080
"url": "/swagger-info",
"groupname":"用户服务分组2"
},
{
"name": "认证服务",
"host":"192.168.0.101",
"port":8080
"url": "/swagger-info",
"groupname":"认证服务分组1"
},
{
"name": "认证服务",
"host":"192.168.0.101",
"port":8080
"url": "/swagger-info",
"groupname":"认证服务分组2"
}
]
2.详情接口(/swagger-info)
根据上面响应的分组信息,请求后加载当前微服务针对的真实swagger接口/v2/api-docs,生成文档
有没有现成的sample可以参考的
你的多个微服务都是基于SpringBoot的 吗
@Kimmyzhao SpringCloud的basePath这个bug已经解决了,还没发布新版本,源码pull下来 install后可以使用的
好的,谢了
@吕兵阳 @萧明
《Spring Cloud Zuul中使用Swagger汇总API接口文档》,这个就是按照上面的思路在zuul中做的实现,但是用的原生swagger-ui,可以借鉴一下。
每个微服务也不用集成ui的jar包了,这个小组件里面可以建自己的项目,随意组装不同服务的接口url,生成出来文档
感谢兄弟们,最终还是用zuul搞好了。
登录 后才可以发表评论