南沙企业网站建设,网站建设优化托管,百度地图怎么搜街景,9420高清免费视频在线观看有很多读者问过这样的一个问题#xff1a;虽然使用Swagger可以为Spring MVC编写的接口生成了API文档#xff0c;但是在微服务化之后#xff0c;这些API文档都离散在各个微服务中#xff0c;是否有办法将这些接口都整合到一个文档中#xff1f;之前给大家的回复都只是简单的… 有很多读者问过这样的一个问题虽然使用Swagger可以为Spring MVC编写的接口生成了API文档但是在微服务化之后这些API文档都离散在各个微服务中是否有办法将这些接口都整合到一个文档中之前给大家的回复都只是简单的说了个思路昨天正好又有人问起索性就举个例子写成博文供大家参考吧。 如果您还不了解Spring Cloud Zuul和Swagger建议优先阅读下面两篇有一个初步的了解
Spring Cloud构建微服务架构服务网关基础Spring Boot中使用Swagger2构建强大的RESTful API文档
准备工作
上面说了问题的场景是在微服务化之后所以我们需要先构建两个简单的基于Spring Cloud的微服务命名为swagger-service-a和swagger-service-b。
下面只详细描述一个服务的构建内容另外一个只是名称不同如有疑问可以在文末查看详细的代码样例。
第一步构建一个基础的Spring Boot应用在pom.xml中引入eureka的依赖、web模块的依赖以及swagger的依赖这里使用了我们自己构建的starter详细可点击查看。主要内容如下
parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version1.5.10.RELEASE/version relativePath//parentdependencies dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-eureka/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdcom.spring4all/groupId artifactIdswagger-spring-boot-starter/artifactId version1.7.0.RELEASE/version /dependency/dependenciesdependencyManagement dependencies dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId versionDalston.SR1/version typepom/type scopeimport/scope /dependency /dependencies/dependencyManagement第二步编写应用主类
EnableSwagger2DocEnableDiscoveryClientSpringBootApplicationpublic class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); } RestController class AaaController { Autowired DiscoveryClient discoveryClient; GetMapping(/service-a) public String dc() { String services Services: discoveryClient.getServices(); System.out.println(services); return services; } }}其中EnableSwagger2Doc注解是我们自制Swagger Starter中提供的自定义注解通过该注解会初始化默认的Swagger文档设置。下面还创建了一个通过Spring MVC编写的HTTP接口用来后续在文档中查看使用。
第三步设置配置文件内容
spring.application.nameswagger-service-aserver.port10010eureka.client.serviceUrl.defaultZonehttp://eureka.didispace.com/eureka/swagger.base-packagecom.didispace其中eureka服务端的配置采用了本站的公益eureka大家可以通过http://eureka.didispace.com/查看详细以及使用方法。另外swagger.base-package参数制定了要生成文档的package只有com.didispace包下的Controller才会被生成文档。
注意上面构建了swagger-service-a服务swagger-service-b服务可以如法炮制不再赘述。
构建API网关并整合Swagger
在Spring Cloud构建微服务架构服务网关基础一文中已经非常详细的介绍过使用Spring Cloud Zuul构建网关的详细步骤这里主要介绍在基础网关之后如何整合Swagger来汇总这些API文档。
第一步在pom.xml中引入swagger的依赖这里同样使用了我们自制的starter所以主要的依赖包含下面这些
dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-zuul/artifactId/dependencydependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-eureka/artifactId/dependencydependency groupIdcom.spring4all/groupId artifactIdswagger-spring-boot-starter/artifactId version1.7.0.RELEASE/version/dependency第二步在应用主类中配置swagger具体如下
EnableSwagger2DocEnableZuulProxySpringCloudApplicationpublic class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); } Component Primary class DocumentationConfig implements SwaggerResourcesProvider { Override public ListSwaggerResource get() { List resources new ArrayList(); resources.add(swaggerResource(service-a, /swagger-service-a/v2/api-docs, 2.0)); resources.add(swaggerResource(service-b, /swagger-service-b/v2/api-docs, 2.0)); return resources; } private SwaggerResource swaggerResource(String name, String location, String version) { SwaggerResource swaggerResource new SwaggerResource(); swaggerResource.setName(name); swaggerResource.setLocation(location); swaggerResource.setSwaggerVersion(version); return swaggerResource; } }}说明EnableSwagger2Doc上面说过是开启Swagger功能的注解。这里的核心是下面对SwaggerResourcesProvider的接口实现部分通过SwaggerResource添加了多个文档来源按上面的配置网关上Swagger会通过访问/swagger-service-a/v2/api-docs和swagger-service-b/v2/api-docs来加载两个文档内容同时由于当前应用是Zuul构建的API网关这两个请求会被转发到swagger-service-a和swagger-service-b服务上的/v2/api-docs接口获得到Swagger的JSON文档从而实现汇总加载内容。
测试验证
将上面构建的两个微服务以及API网关都启动起来之后访问网关的swagger页面比如http://localhost:11000/swagger-ui.html此时可以看到如下图所示的内容 可以看到在分组选择中就是当前配置的两个服务的选项选择对应的服务名之后就会展示该服务的API文档内容。
代码示例
本文示例读者可以通过查看下面仓库的中的swagger-service-a、swagger-service-b、swagger-api-gateway三个项目
GithubGitee
如果您对这些感兴趣欢迎star、follow、收藏、转发给予支持
以下专题教程也许您会有兴趣
Spring Boot基础教程Spring Cloud基础教程