在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Swagger Butler当我们构建分布式系统的时候,虽然我们可以用Swagger来方便为每个服务自动产出API文档页面。但是随着服务数量的增多,内部服务间的依赖关系的复杂度增加,每个服务开发人员要关心和查阅的文档变得越来越多。由于每个服务的文档地址可能都不一样,这使得不得不维护一个文档的索引来方便查阅,并且这个索引还需要不断的去维护更新。 那么有没有什么工具可以帮我们快速的汇集这些服务的Swagger文档呢?只需要记住一个访问地址,就可以访问所有服务的API文档?当服务增加的时候,不需要手工维护就能自动发现新服务的API文档?如果您有上面的这些问题,那么不妨看看这个项目,或许可以解决您的这些烦恼! Swagger Butler是一个基于Swagger与Zuul构建的API文档汇集工具。通过构建一个简单的Spring Boot应用,增加一些配置就能将现有整合了Swagger的Web应用的API文档都汇总到一起,方便查看与测试。 项目地址 使用手册版本说明swagger-butler的使用版本与Spring Boot版本直接相关,对应关系如下;
当前最新版本2.0.0,1.x版本将不再继续更新。 快速入门该工具的时候非常简单,先通过下面几步简单入门: 第一步:构建一个基础的Spring Boot应用 如您还不知道如何创建Spring Boot应用,可以先阅读本篇入门文章 第二步:在pom.xml中引入依赖 <dependencies> <dependency> <groupId>com.didispace</groupId> <artifactId>swagger-butler-core</artifactId> <version>2.0.0</version> </dependency></dependencies> 第三步:创建应用主类,增加 @EnableSwaggerButler@SpringBootApplicationpublic class StaticApplication { public static void main(String[] args) { SpringApplication.run(StaticApplication.class); }} 第四步:配置文件中增加Swagger文档的地址配置 spring.application.name=swagger-butler-example-staticserver.port=11000# default configswagger.butler.api-docs-path=/v2/api-docsswagger.butler.swagger-version=2.0# swagger resourcezuul.routes.user.path=/service-a/**zuul.routes.user.url=http://localhost:10010/swagger.butler.resources.user.name=user-service# swagger resourcezuul.routes.product.path=/service-b/**zuul.routes.product.url=http://localhost:10020/swagger.butler.resources.product.name=product-serviceswagger.butler.resources.product.api-docs-path=/xxx/v2/api-docsswagger.butler.resources.product.swagger-version=2.0 上面配置了两个文档位置,由于这里还没有引入服务发现机制,所以Zuul的路由需要我们自己配置。然后在配置resource信息的时候,从1.1.0版本开始做了较大的调整,由于具体的访问路径是可以通过路由信息产生的,所以对于resource的配置信息只关注三个内容:
第五步:查看聚合文档。 原生文档:访问 增强文档:访问
Zuul的路由与SwaggerResources配置之间的关系如上示例中 zuul.routes.<route-name>.path=/service-b/**zuul.routes.<route-name>.url=http://localhost:10020/swagger.butler.resources.<route-name>.name=product-serviceswagger.butler.resources.<route-name>.api-docs-path=/xxx/v2/api-docsswagger.butler.resources.<route-name>.swagger-version=2.0
全局配置对于Swagger文档获取的全局配置内容,目前主要包含下面几个参数: swagger.butler.api-docs-path=/v2/api-docsswagger.butler.swagger-version=2.0 使用Zuul中的路由自动配置在快速入门示例中我们配置了两个路由信息,同时为这两个路由信息配置了对应的Swagger信息来获取API文档详情,从1.1.0版本开始,增加了几个通过Zuul的路由配置来自动生成文档信息的参数,这样可以减少快速入门示例中那些繁琐的配置。对于快速入门例子,我们可以做如下改造: # swagger resourcezuul.routes.user.path=/service-a/**zuul.routes.user.url=http://localhost:10010/# swagger resourcezuul.routes.product.path=/service-b/**zuul.routes.product.url=http://localhost:10020/# use zuul routes generate swagger resourcesswagger.butler.auto-generate-from-zuul-routes=true 在设置了 忽略某些路由生成# swagger resourcezuul.routes.user.path=/service-a/**zuul.routes.user.url=http://localhost:10010/# swagger resourcezuul.routes.product.path=/service-b/**zuul.routes.product.url=http://localhost:10020/# use zuul routes generate swagger resourcesswagger.butler.auto-generate-from-zuul-routes=trueswagger.butler.ignore-routes=product 如上示例,通过
指定某些路由生成# swagger resourcezuul.routes.user.path=/service-a/**zuul.routes.user.url=http://localhost:10010/# swagger resourcezuul.routes.product.path=/service-b/**zuul.routes.product.url=http://localhost:10020/# use zuul routes generate swagger resourcesswagger.butler.auto-generate-from-zuul-routes=trueswagger.butler.generate-routes=product 如上示例,通过
与服务治理整合与eureka整合在整合eureka获取所有该注册中心下的API文档时,只需要在上面工程的基础上增加下面的配置: 第一步: <dependencies> <dependency> <groupId>com.didispace</groupId> <artifactId>swagger-butler-core</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>2.0.0.RELEASE</version> </dependency></dependencies> 第二步:应用主类增加 @EnableDiscoveryClient@EnableSwaggerButler@SpringBootApplicationpublic class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class); }} 第三步:修改配置文件,增加eureka的配置,比如: spring.application.name=swagger-butler-example-eurekaserver.port=11001eureka.client.service-url.defaultZone=http://eureka.didispace.com/eureka/swagger.butler.auto-generate-from-zuul-routes=trueswagger.butler.generate-routes=swagger-service-a, swagger-service-bswagger.butler.resources.swagger-service-b.api-docs-path=/xxx/v2/api-docs 由于整合了eureka之后,zuul会默认为所有注册服务创建路由配置(默认的路由名为服务名),所以只需要通过
与consul整合在整合eureka获取所有该注册中心下的API文档时,只需要在上面工程的基础上增加下面的配置: 第一步: <dependencies> <dependency> <groupId>com.didispace</groupId> <artifactId>swagger-butler-core</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> <version>2.0.0.RELEASE</version> </dependency></dependencies> 第二步:应用主类增加 @EnableDiscoveryClient@EnableSwaggerButler@SpringBootApplicationpublic class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class); }} 第三步:配置文件中增加eureka的配置,比如: spring.application.name=swagger-butler-example-consulserver.port=11002spring.cloud.consul.host=localhostspring.cloud.consul.port=8500swagger.butler.auto-generate-from-zuul-routes=trueswagger.butler.generate-routes=swagger-service-a, swagger-service-bswagger.butler.resources.swagger-service-b.api-docs-path=/xxx/v2/api-docs 这里除了consul自身的配置之外,其他内容与整合eureka时候的是一样的。
贡献者推荐内容公众号 |
请发表评论