通过ZUUL网关统一收集API文档

在实际的项目中经常通过统一网关把服务的API暴露出去,但是如果后端服务数量众多,而且分散在不同的项目中,那么要收集这些项目的API就比较麻烦,虽然能够通过每个项目的Swagger来查看、测试这些API,但是还是存在诸多不便,那么有没有办法将这些分散的Swagger整合到一起呢?答案是肯定的,下面就这个问题的解决办法做一介绍。

统一网关输出API

后端服务使用统一的网关输出API是前提条件,也就是后端API都必须经过网关鉴权和路由。

配置ZUUL

在配置文件里边配置ZUUL,指明后端服务的路由策略。

#feign配置
zuul:
  prefix: /open/v1
  strip-prefix: true
  routes:
    userbase:
      path: /userbase/**
      serviceId: user-base
    userorg:
      path: /userorg/**
      serviceId: user-org

增加Swagger支持

通常网关没有Controller,所以一般也不会引入Swagger,但是为了能够以Swagger的方式集成API,则Swagger的相关支持必须引入到网关项目中,引入方法和Controller项目一致。

  1. 引入相关maven包
        
        
            io.springfox
            springfox-swagger2
            2.7.0
        
        
            io.springfox
            springfox-swagger-ui
            2.7.0
        
  1. 编写Swagger主类,无需特殊说明
  2. 编写zuul配置类,该类为了从配置文件中读取相关配置到Bean中作为后面集成后端服务API信息。
@Configuration
@ConfigurationProperties(prefix = "zuul")
@Data
public class ZuulConf {
    private String prefix;
    private JSONObject routes;
}
  1. 编写Swagger资源组件,这个组件实现了SwaggerResourcesProvider接口,是Swagger集成的核心部分,就是将需要路由到其他后端服务的Swagger接口配置进来。
@Component
@Primary
class DocumentationConfig implements SwaggerResourcesProvider {
    @Autowired
    private ZuulConf zuulConf;

    @Override
    public List get() {
        List resources = new ArrayList();
        zuulConf.getRoutes().entrySet().forEach(s -> {
            resources.add(swaggerResource(s.getKey(), zuulConf.getPrefix() + "/" + s.getKey() + "/v2/api-docs", "2.0"));
        });
        //对API列表按照名称排序
        resources.sort(Comparator.comparing(SwaggerResource::getName));
        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;
    }
}

集成后的效果

集成后直接打开网关的Swagger即可从下拉列表中切换到其他后端服务API的Swagger,访问这些API也是通过网关访问。


通过ZUUL网关统一收集API文档_第1张图片
通过网关集成API效果

你可能感兴趣的:(通过ZUUL网关统一收集API文档)