如何将 swagger-ui 文档集中到可通过单个端点访问的资源中

How to centralise swagger-ui docs into a resource accessible via single endpoint

我已经设置了一个 spring-boot 应用程序,我希望 Swagger UI 能够在一个页面上显示我所有的文档。

对于后台,该应用程序是容器化的,并且 运行 在一个集群中,该集群具有由 k8s 编排的多个部署。有一个入口服务根据传入 HTTP 请求的结构路由到正确的部署。

每个模块有多个controller,使用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 页面,其中包含每个端点的文档。如何提供中心化的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 的信息在 spring 引导: https://cloud.spring.io/spring-cloud-netflix/multi/multi__router_and_filter_zuul.html

最后,我配置了入口服务,将所有 swagger 请求重定向到网关 API,网关使用 zuul 获取 swagger 规范。