用zuul將微服務的多個swagger api文檔聚合成一個文檔

先看下效果圖:

myc-order:代表訂單服務

myc-user:代表用戶服務

myc-car:代表車服務

...等等

下面我簡單說下集成步驟和關鍵點。

1.在每個服務的pom中添加以下依賴。

  <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>

注意:僅僅需要添加這個就行。zuul負責ui

2.將這個放到你的config啓動,注意這裏我用了一個佔位符獲取當前文檔的名稱,避免寫死後續可能添加其他模塊。

@ConditionalOnClass(value = {Swagger.class})
@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Value("${spring.application.name}")
    private String applicationName;
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.miaoyouche"))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(parameters());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title(applicationName+"接口文檔")
                .description(applicationName+"接口文檔")
                .contact(new Contact("miaoyouche", "http://www.miaoyouche.com", "[email protected]"))
                .version("1.0")
                .build();
    }

    private List<Parameter> parameters() {
        ParameterBuilder parameterBuilder = new ParameterBuilder();
        List<Parameter> parameters = new ArrayList<>();
        parameterBuilder.name("Authorization")
                .description("Authorization")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false).build();
        parameters.add(parameterBuilder.build());
        return parameters;
    }

}

接着是zuul的配置

3.在zuul的config中添加如下配置,注意這裏有個apiNames是所有的分組服務名,避免寫死,直接從配置文件讀取

@Component
@Primary
public class DocumentationConfig implements SwaggerResourcesProvider {
    @Value("${rest.api.names}")
    private String[] apiNames;

    @Override
    public List<SwaggerResource> get() {
        List resources = new ArrayList<>();
        if (apiNames != null) {
            Arrays.stream(apiNames).forEach(s ->
                    resources.add(swaggerResource(s, "/openapi/" + s + "/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;
    }
}

4.zuul的pom文件中添加以下依賴:

  <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
 <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
        </dependency>

5.zuul的代理配置:

zuul:
  routes:
    myc-user:
      path: /openapi/myc-user/**
      serviceId: myc-user
    myc-car:
      path: /openapi/myc-car/**
      serviceId: myc-car
    myc-auth:
      path: /openapi/myc-auth/**
      serviceId: myc-auth
    myc-order:
      path: /openapi/myc-order/**
      serviceId: myc-order
  stripPrefix: true
  sensitiveHeaders:

下面就是啓動項目進行訪問了:

http://localhost:port/doc.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章