问题描述
我们使用 connexion
来提供 swagger ui。我们正在使用 openapi 3.0.0 规范。这是我们 swagger.yml
的一小部分:
openapi: 3.0.0
servers:
- url: /
paths:
/resource:
...
/resource2:
...
在这种情况下,ui 在 /ui
处提供。然而,我们使用 Nginx 将所有请求重定向到 /resource
到这个容器中。我们希望 swagger-ui 在 /some-subdir/ui
而不是 /ui
提供服务,以便能够将请求重定向到正确的容器。
试用 1
openapi: 3.0.0
servers:
- url: /app
paths:
/resource:
...
/resource2:
...
这是可行的,除了资源现在在 /app/resource
等处提供,而同一资源将来可能由另一个应用提供,因此我们不希望应用名称出现在资源(虽然它可能仅适用于 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
(或任何其他子目录)下,因此无法访问。>
解决方法
差不多了,还有另一个(隐藏得很好)选项可以更改 openapi.json
的路径,与 swagger_url
的组合有效:
options = {
'swagger_url': '/app/ui','openapi_spec_path': '/app/openapi.json'
}
connexion_app = connexion.App(__name__,specification_dir='./',options=options)