3

我使用 connexion 模块构建了一个基于 Python/Flask 的 REST API。这与使用 swagger.yml 文件定义 REST API 效果很好。该应用程序正在运行,但是当我导航到 /ui 时,我在浏览器中得到的只是:

在此处输入图像描述

我没有禁用 UI,所以我不确定发生了什么以及为什么 UI 没有显示。我的应用程序没有 /static 文件夹(它只是一个 API),因此该应用程序不提供任何静态文件,不确定这是否与问题有关。

任何关于我做错了什么的建议、指示或提示将不胜感激!

这是我的代码的简化示例:

# 3rd party libraries
from flask_cors import CORS
import connexion

def create_app(config_key, instance_config=None):
    # create the connexion instance
    connex_app = connexion.FlaskApp(__name__, specification_dir='./files/swagger/')
    connex_app.server = 'gevent'

    # get the Flask app instance
    app = connex_app.app

    # configure the application
    app.config.from_object(config_key)

    # add CORS support to application
    CORS(app)

    # define the API with the SWAGGER API definition YAML file
    connex_app.add_api('line_controller_api.yml',
                       base_path='{url_prefix}'.format(url_prefix=app.config.get('URL_PREFIX', '/')),
                       resolver=AppResolver())

    return connex_app


def production_app(instance_config=None):
    app = create_app('api_config.ProductionConfig', instance_config)
    return app

if __name__ == '__main__':
    app = create_app('api_config.DevelopmentConfig')
    port = 5001
    logger.info('Line Controller API running on port %s', port)
    app.run(host='0.0.0.0', port=port)

在此先感谢道格

4

4 回答 4

8

从 2.0.1 版本开始的connexion内部没有捆绑swagger-ui 。您已使用以下命令显式安装它(注意引号)

pip install 'connexion[swagger-ui]'

一旦你安装它。swagger 将与 connexion 一起使用。在较早的版本中,swagger 曾经与 /ui 一起工作,最后添加到您的 urlhttp(s)://host:port

但在 2.0.x 以后使用http(s)://host:port/<basepath>/ui

于 2019-07-25T17:43:12.143 回答
1

我有同样的问题。我解决了

pip install pathlib swagger_ui_bundle
于 2020-04-02T13:22:38.723 回答
1

我的 stackoverflow 声誉太低,我无法评论上面的Ashraff Ali Wahab的答案,但我刚刚发现我可以自己编辑它。在我理解所呈现的 shell 语法是错误的( Pablo Marin-Garcia指出)之后,它为我解决了这个问题就足够了。这是在 Unix/Linux 中正确安装 swagger-ui 插件所需的 shell 语法:

pip install 'connexion[swagger-ui]'

任何匹配的引号都可以。请注意,如果没有引号,pip 命令将成功运行,但不会像您期望的那样安装 swagger-ui 组件。此外,我花了很多时间在这个问题上摸不着头脑,因为我是在 virtualenv 中完成的。我还在 virtualenv 中搜索了 swagger-ui 组件,find发现安装了一些存根。所以,如果你是 python 新手或者你很赶时间,这很容易错过。

一天结束时,我决定添加一个local_requirement.txt文件,其中列出了我在使用 stock requirements.txt之前安装的正确版本的 Werzueg、connexion 和“connexion [swagger-ui]”,因为它看起来像 Flask SmartBear 工具生成的 API 代码有些过时。

于 2020-03-02T23:18:07.410 回答
0

这是由于缺少尾随斜杠造成的。只需在您的网址末尾添加斜杠即可。

相关问题https://github.com/zalando/connexion/issues/346

于 2018-05-11T06:54:29.073 回答