我已经设置了一个 spring-boot 应用程序,我希望 Swagger UI 在单个页面上显示我聚合的所有文档。
对于后台,应用是容器化的,并在具有由 k8s 编排的多个部署的集群中运行。有一个入口服务,它根据传入 HTTP 请求的结构路由到正确的部署。
每个模块中有多个控制器,这些控制器都配置了Springfox。
@Configuration
@EnableSwagger2
public class Swagger
{
@Bean
public Docket api()
{
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
上面只是给了我一个默认的 swagger UI 页面,其中包含每个端点的文档。如何提供一个集中的招摇用户界面?
为了解决这个问题,我使用 kubernetes 服务发现来注册我的客户端,有关 k8s 客户端发现的更多信息:https://cloud.spring.io/spring-cloud-static/spring-cloud-kubernetes/2.1.0.RC1/multi/multi__discoveryclient_for_kubernetes.html
我还创建了一个带有 zuul 代理的网关服务 API,用于查询 swagger 规格,有关 zuul 在春季启动中的更多信息:https://cloud.spring.io/spring-cloud-netflix/multi/multi__router_and_filter_zuul.html
最后,我将入口服务配置为将所有 swagger 请求重定向到网关 API,该 API 使用 zuul 来获取 swagger 规范。