【问题标题】:connexion serve swagger ui at another urlconnexion 在另一个 url 服务 swagger ui
【发布时间】:2021-02-11 08:26:35
【问题描述】:

我们正在使用connexion 来提供招摇的用户界面。我们使用的是 openapi 3.0.0 规范。这是我们swagger.yml的一小部分:

openapi: 3.0.0

servers:
  - url: /

paths:
  /resource:
    ...
  /resource2:
    ...

在这种情况下,用户界面在/ui 提供。然而,我们正在使用 nginx 将所有到 /resource 的请求重定向到这个容器中。我们希望在 /some-subdir/ui 而不是 /ui 提供 swagger-ui,以便能够将请求重定向到正确的容器。

试用 1

openapi: 3.0.0

servers:
  - url: /app

paths:
  /resource:
    ...
  /resource2:
    ...

这可行,除了资源现在在/app/resource 等处提供,而同一资源将来可能由另一个应用提供,所以我们不希望应用名称出现在资源的 URL 中(虽然对于 swagger-ui 来说可能是可以接受的)。

试用 2

我发现,在构建连接应用程序时,我可以指定swagger_url 选项:

options = {
    'swagger_url': '/app/ui'
}
connexion_app = connexion.App(__name__, specification_dir='./', options=options)

现在 swagger-ui 服务于 /app/ui,但 ui 试图服务于 /openapi.json,因为不在 /app(或任何其他子目录)下,所以无法访问。

【问题讨论】:

    标签: swagger-ui openapi connexion


    【解决方案1】:

    几乎就在那里,还有另一个(隐藏得很好)选项可以将路径更改为openapi.json,与swagger_url 的组合有效:

    options = {
        'swagger_url': '/app/ui',
        'openapi_spec_path': '/app/openapi.json'
    }
    connexion_app = connexion.App(__name__, specification_dir='./', options=options)
    

    【讨论】: