连接在另一个网址上提供 swagger ui

问题描述

我们使用 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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...