首页 > 解决方案 > Springdoc(Swagger)代理后的分组配置

问题描述

我正在使用最新的 springdoc 库来创建一个公共端点,将所有 Swagger 配置集中在一个地方。Kubernetes 中部署了一堆微服务,因此将文档放在一个地方会很方便。最简单的方法是使用这样的东西(https://springdoc.org/faq.html#how-can-i-define-groups-using-applicationyml):

springdoc:
  api-docs:
    enabled: true
  swagger-ui:
    disable-swagger-default-url: true
    urls:
      - name: one-service
        url: 'http://one.server/v3/api-docs'
      - name: second-service
        url: 'http://second.server/v3/api-docs'

而且效果很好,我可以从右上角的列表中选择。问题是它不能通过代理工作。根据文档,我需要设置一些标题(https://springdoc.org/faq.html#how-can-i-deploy-springdoc-openapi-ui-behind-a-reverse-proxy),它适用于单一服务直接调用。但是当我尝试上述分组时,标头不会传递给一个服务或第二个服务,它们会生成指向本地主机的文档。

我怀疑我需要使用分组(https://springdoc.org/faq.html#how-can-i-define-multiple-openapi-definitions-in-one-spring-boot-project)但我错过了很好的例子,如何达到类似的效果(对来自不同微服务的文档进行分组)。示例仅显示一个外部地址,或对本地端点进行分组。我希望,使用这种方法,我将能够传递标题。

标签: kubernetesswaggerspringdoc

解决方案


propertiesspringdoc.swagger-ui.urls.*适合配置外部(/v3/api-docs url),例如,如果您想在一个应用程序中聚合其他服务的所有端点。

它不会继承代理配置,但会使用您在服务器http://one.server/v3/api-docshttp://second.server/v3/api-docs中定义的服务器 url 。

您希望在您的服务前面有一个代理,由您的服务来处理您想要公开的正确服务器 URL。

如果您希望它开箱即用,您可以使用处理代理和路由的解决方案,例如spring-cloud-gateway


推荐阅读