今天这篇文章介绍一下微服务如何聚合Swagger实现接口文档管理。

文章目录如下:

为什么需要聚合?

微服务模块众多,如果不聚合文档,则访问每个服务的API文档都需要单独访问一个Swagger UI界面,这么做客户端能否接受?

反正作为强迫症的我是接受不了.......

既然使用了微服务,就应该有统一的API文档入口

如何聚合?

统一的文档入口显然应该聚合到网关中,通过网关的入口统一映射到各个模块。

本文采用Spring Cloud Gateway 聚合 Swagger 的 方式 生成API文档。

案例源码结构如下:

本文只介绍如何聚合Swagger,关于网关、注册中心等内容不再介绍,有不了解的看陈某前面文章。

单个服务如何聚合Swagger?

这里的单个服务不包括网关,网关需要单独配置。

单个服务聚合其实很简单,就是普通的Spring Boot 整合 Swagger,但是微服务模块众多,不能每个微服都整合一番,因此可以自定义一个swagger-starter,之后每个微服务都依赖这个starter即可。

详细的步骤如下:

1、创建swagger-starter

自定义starter这里就不再介绍了,都是基础的知识;

目录结构如下:

1、添加依赖

对于Swagger原生的UI界面陈某不太喜欢,因此使用了一款看起来还不错的UI界面,依赖如下:

<!--swagger-->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId>
</dependency><!--swagger-ui  这里是用了一个好看一点ui界面-->
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId>
</dependency>

对于UI界面,每个人审美不同,选择自己喜欢的就好。

2、自动配置类配置Swagger

陈某是将每个服务的API信息抽离出一个属性类SwaggerProperties,后续只需要在每个服务的配置文件中指定即可。

@Data
@ConfigurationProperties(prefix = SwaggerProperties.PREFIX)
@Component
@EnableConfigurationProperties
public class SwaggerProperties {public static final String PREFIX="spring.swagger";//包private String basePackage;//作者相关信息private Author author;//API的相关信息private ApiInfo apiInfo;@Datapublic static class ApiInfo{String title;String description;String version;String termsOfServiceUrl;String license;String licenseUrl;}@Datapublic static class Author{private String name;private String email;private String url;}
}

对于Swagger的配置其实很简单,分为如下部分:

  1. API文档基本信息配置
  2. 授权信息配置(基于OAuth2的认证配置)

API文档配置无非就是配置文档的基本信息,比如文档标题、作者、联系方式.....

代码如下:

授权信息配置也很简单,就是在全局信息的请求头中配置一个能够放置令牌的地方,代码如下:

此处对应UI界面的地方如下图:

只需要将获取token令牌设置到这里即可。

好了,swagger-starter关键代码就介绍完了

2、微服务引用swagger-starter

单个微服务引用就很简单了,只需要添加如下依赖:

<dependency><groupId>cn.myjszl</groupId><artifactId>swagger-starter</artifactId>
</dependency>

接下来只需要在配置文件配置API相关的信息即可,比如订单服务的配置如下:

好了,至此单个服务的配置完成了。

此时我们可以验证一下,直接访问:http://localhost:3002/swagger-order-boot/v2/api-docs,结果如下图:

网关如何聚合Swagger?

网关聚合的思想很简单,就是从路由中获取微服务的访问地址,然后拼接上 /v2/api-docs 即可。

同样的还是要添加Swagger的两个依赖,如下:

<!--swagger-->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId>
</dependency><!--swagger-ui  这里是用了一个好看一点ui界面-->
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId>
</dependency>

创建GatewaySwaggerResourcesProvider实现SwaggerResourcesProvider,重写其中的get方法,代码如下:

好了,网关的配置这里就完成了。

此时启动网关、订单、库存服务,直接访问网关的文档:http://localhost:3001/doc.html,结果如下图:

API文档好用的功能介绍

不得不说这款Swagger UI 界面还是比较简单易用的,个人用起来还不错。

1、搜索功能

在右上角的搜索功能可以根据接口描述搜索相关的接口信息,如下图:

2、离线文档

可以直接拷贝文档的MarkDown形式转换成Html或者PDF生成离线文档,如下图:

3、令牌配置

在访问需要认证的接口时,可以通过配置令牌,这样令牌将会全局生效,不必每个请求都要配置一遍,如下:

4、配置缓存

该文档的所有配置,包括请求参数、授权令牌等信息都是缓存的,也就是说配置一次,下次再打开的时候也是默认存在的。

5、全局参数配置

对于一些全局的参数,比如请求头中需要携带请求客户端、版本号等信息,可以在全局参数中配置,如下:

总结

本篇文章介绍了微服务集成网关聚合Swagger文档,开发中非常实用。

原文链接:https://www.cnblogs.com/cbvlog/p/15892281.html

微服务如何聚合 API 文档?这波操作也太秀了相关推荐

  1. SpringCloud微服务项目的api文档聚合

    目录 原理简介 在网关中配置好路由 Spring Cloud Gatway + Springfox 第一步.在各项目里配置Springfox 第二步.在网关中编写api文档资源路径 注意 Spring ...

  2. 高性能微服务网关APISIX - API文档

    Admin API Description Admin API 是为 Apache APISIX 服务的一组 API,我们可以将参数传递给 Admin API 以控制 APISIX 节点.更好地了解其 ...

  3. 关于knife4j工具聚合api文档的使用

    关于knife4j工具聚合api文档的使用 1 knife4j工具的介绍 简单案例 1 导入Knife4j依赖 2 添加配置文件 3 添加控制器 4 查看文档 2 knife4j工具的使用 聚合微服务 ...

  4. 聚合API文档阅读帮助

    聚合API文档阅读帮助 该文基于聚合云数据开放平台的API文档,目的使得开发者能够方便的快速了解我们这个API文档的结构,从而能够经行高效的开发. 该API文档总共有6个大类:国外API.国内API. ...

  5. javaee 中文帮助文档_大牛耗时三天整理的:微服务+Nginx+Kubernetes实战文档和面试题...

    前言 十年之前,相信大家掌握了Java EE互联网轻量级框架整合开发 SSM框架SpringMVC+Spring+MyBatis就已经能够轻轻松松找到一份薪资很高的java开发工作了,而如今只会SSM ...

  6. 25岁阿里120W年薪架构师推荐学习的750页微服务架构深度解析文档

    前言 当前,微服务架构在国内正处于蓬勃发展的阶段,无论是大型互联网公司还是传统的IT企业,纷纷采用微服务架构构建系统. 在过去几年里,DevOps.云原生.面向演进式架构等理念已经深入人心,围绕微服务 ...

  7. 超全,看完这份微服务架构与实践文档,微服务不再难

    前言: 微服务近年来受到了极大的关注并成为趋势,不信的话可以查看 Google Trends. 可以看到从2014年开始人们对它产生了极大的兴趣,随着时间的推移,这一趋势仍在增长. 随着数字化转型的推 ...

  8. 14-网关实战:网关层整合 Swagger 聚合API文档

    上节课介绍了网关层的认证鉴权,今天这节介绍一下网关层如何聚合API接口文文档. 为什么需要聚合API接口文档? 大型微服务系统模块众多,木谷博客系统就有9个,如果这些服务的接口地址没有一个统一,那么客 ...

  9. 微服务项目构建标准文档

    一    搭建自己的微服务项目 1.1.1  搭建一个基于Spring Boot框架 的Maven子项目 我们在微服务架构上选择的是maven的父子项目,父项目的名称是cloud. 点击cloud   ...

最新文章

  1. C语言做一个通讯录程序(在console里面运行)
  2. python 二维 排序
  3. telnet 一直显示trying_Telnet背后的故事
  4. TEG《选择》乘风破浪 · 披荆斩棘
  5. 世界最厉害的14位程序员,你认识几个?
  6. 如何查看 SAP Fiori Elements List Report Table 都支持哪些设置
  7. Perl语言编程学习笔记2
  8. UIPickerView基本使用
  9. 虽然我们可能不想对元素应用3D变换,可我们一样可以开启3D引擎
  10. ECM之ucf session wait timeout【DFC_ACS_LOG_NO_NL】问题分析
  11. 陈纪修老师《数学分析》 第04章:微分 笔记
  12. smartdns使用指南_SmartDNS 使用教程(PLUS+版)
  13. 升级opengl和显卡驱动_又更新了!英伟达OpenGL 4.4显卡驱动下载
  14. 游戏开发中的沟通成本
  15. linux系统可以安装企业微信,Linux 上安装微信客户端
  16. 小智机器人有初中课程吗_张小智
  17. Autovue 21.0.2.3 新功能介绍
  18. MybatisPlus代码生成器报错AutoGenerator()‘ has private access in ‘com.baomidou.
  19. 基本概念:线与逻辑、锁存器、缓冲器、建立时间、缓冲时间
  20. java 批量重命名_Java实现文件批量重命名

热门文章

  1. ssh远程No route to host问题解决
  2. GWAS计算BLUE值2--LMM计算BLUE值
  3. 测试行业3年经验,从大厂裸辞后,面试阿里、字节全都一面挂,被面试官说我的水平还不如应届生
  4. ISE FPGA时钟系统
  5. uniApp图片加水印
  6. 如何解除病毒对各种杀毒软件的劫持
  7. python 手游自动化测试_Python+Appium实现APP自动化测试
  8. SQL——PostgreSQL Driver
  9. Matlab机器人工具箱(3-4):五自由度机械臂(计算力矩控制方法与roblocks)
  10. vim显示空格和tab符号