我尝试过使用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应用程序中。
答案 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();
}
}