首页 > 解决方案 > connexion 在另一个 url 服务 swagger ui

问题描述

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

openapi: 3.0.0

servers:
  - url: /

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

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

试验 1

openapi: 3.0.0

servers:
  - url: /app

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

哪个有效,除了资源现在在/app/resourceetc 处提供,而同一资源将来可能由另一个应用程序提供,所以我们不希望应用程序名称出现在资源的 URL 中(虽然它可能是可以接受的只是为了招摇-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-uiopenapiconnexion

解决方案


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

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

推荐阅读