「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。
哈喽大家好,我是阿Q!
之前公司使用了swagger作为文档管理工具,原生的swagger-ui非常丑,后来改用了开源项目 萧明 / knife4j 的swagger组件进行了swagger渲染,改造之后界面漂亮多了,操作也方便了很多。
当然这不是重点,重点是我们项目引用了knife4j之后出现的一些问题:
- 由于项目中使用了
spring security,使用了knife4j之后,需要对knife4j单独做规则过滤,否则无法访问knife4j的静态资源 - 无论是
knife4j还是原来的swagger-ui,只要服务一停止,swagger文档就打不开了 - 同一个项目下不同的人想要展示不同的文档,特别是在开发阶段,前端同学需要保存多个
swagger地址查看不同的文档 - 集成
knife4j实际上对于项目来说是比较重的,每个微服务都搞一遍也增加了工作量 - ......
gateway 文档聚合模式
有人在gateway处做了文档聚合,它的聚合模式如下图所示
它的原理很简单,就是将请求转发到微服务,从微服务的restful接口中获取swagger的json信息,然后通过前端将swagger信息渲染出来。
这样做的好处就是只需要在网关处集成swagger-ui,其它微服务不需要再单独集成,只需要收集swagger信息然后暴露接口给gateway,等着gateway来取信息即可。但是它没有完全解决上面提到的问题,而且还引入了新的问题
- 网关做文档聚合到底合不合理?本身来说网关是对外暴露的,这种接口文档有可能会被泄露给普通用户,而且个人认为在网关处做这个不符合网关的定位
- 这种模式无法解决开发阶段文档问题,开发阶段文档是会随时更新的,这种模式需要将其发布到正式环境才能查看文档
- 还是要在
spring security加白名单,放开swagger对外的restful接口 - 无法解决同一个项目不同文档的问题
针对这个问题,我想了想,使用另外一种方式尝试着进行改造,下文中我们继续讲解!
题外篇
阿Q将持续更新
java实战方面的文章,感兴趣的可以关注下公众号:阿Q说代码,也可以来技术群讨论问题呦,点赞之交值得深交!