集中式门户网站上的Spring REST doc

时间:2017-11-22 12:26:35

标签: springfox spring-restdocs

我尝试过使用spring boot在springfox swagger上做一些poc。它确实在我的应用程序运行时在同一主机和端口上生成swagger ui。

http://localhost:8080/swagger-ui.html

我的应用程序由部署在云基础架构上的多个微服务组成。这样我最终可能会有多个swagger hub ui

http://microservice1:8080/swagger-ui.html
http://microservice2:8081/swagger-ui.html
http://microservice3:8082/swagger-ui.html

如何在同一主机上托管我的所有springfox swagger hub应用程序。这样我就可以拥有一个整合网页,将我所有的api文档放在一个地方。

对于spring rest doc,我可以使用asciidoctor为我的微服务生成一个单独的html文档。我再次为不同的微服务提供了不同的html文档。

Spring rest doc是否提供此功能?或者在spring cloud中将所有文档合并到一个Web应用程序中。

1 个答案:

答案 0 :(得分:0)

创建一个Zuul过滤器概念。创建一个Zuul过滤器服务,并在pom.xml中添加swagger2依赖性,并在该服务中创建一个配置类,如下所述

@EnableSwagger2
@Configuration
@Component
@Primary
public class SwaggerConfig implements SwaggerResourcesProvider {
    @Override
    public List<SwaggerResource> get() {
        List resources = new ArrayList<>();
        resources.add(swaggerResource("microservice1", "/microservice1/v2/api-docs", "2.0"));
        resources.add(swaggerResource("microservice2", "/microservice2/v2/api-docs", "2.0"));
       resources.add(swaggerResource("microservice3", "/microservice3/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;
    }
}

在其他三个微服务(microservice1,microservice2,microservice3 ..)中添加以下提到的配置

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2).select()
                .apis(RequestHandlerSelectors.basePackage("com.stackoverflow.login.controller"))
                .paths(PathSelectors.regex("/.*")).build().apiInfo(apiEndPointsInfo());
    }

    private ApiInfo apiEndPointsInfo() {
        return new ApiInfoBuilder().title("Spring Boot REST API").description("Employee Management REST API")
                .contact(new Contact("stackoverflow", "www.stackoverflow.com", ""))
                .license("Apache 2.0").licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html").version("1.0.0")
                .build();
    }
}