【问题标题】:Integrating Swagger/OpenAPI generated python server with existing Flask application将 Swagger/OpenAPI 生成的 python 服务器与现有的 Flask 应用程序集成
【发布时间】:2017-01-16 13:28:40
【问题描述】:

我有兴趣将swagger-codegen 生成的 Python 服务器与现有的 Flask 应用程序集成。 swagger-codegen 基于 Connexion 库从 Swagger API specification 生成 Python 实现。

我发现的examples 似乎都期望connexion.App 管理整个flask 应用程序。

import connexion

app = connexion.App(__name__, specification_dir='swagger/')
app.add_api('my_api.yaml')
app.run(port=8080)

但是,我有现有的蓝图、配置和 sqlalchemy 模型,我想与生成的 Connexion API 集成。看起来connexion.App.app 是底层的 Flask 应用程序。一种选择可能是进入并扩展 Connexion Flask 应用程序,可能是这样的:

import connexion

app = connexion.App(__name__, specification_dir='swagger/')

app.app.config.from_pyfile('...')
db.init_app(app.app)
for blueprint in my_blueprints:
    app.app.register_blueprint(blueprint)

app.add_api('my_api.yaml')

app.run(port=8080)

尝试搭载高度定制的 Connexion Flask 应用程序似乎比将来自 connexion.Api 的裸蓝图集成到我现有的 Flask 应用程序中更简单。但是,我无法轻易判断 Connexion 是否旨在与非 Connexion 管理的蓝图很好地配合使用。

在现有的传统 Flask 应用程序中集成 Connexion Swagger 定义的 API 的最佳方式是什么?有人走这条路吗?

【问题讨论】:

    标签: python flask swagger swagger-codegen connexion


    【解决方案1】:

    它可以创建connexion.App,然后从connexion.App(...).app 扩展Flask 实例。

    最容易坚持使用Application Factory。除了作为一种普遍有用的模式之外,它还可以很好地与生成的测试集成。

    一个问题是控制器似乎需要连接模型,特别是如果启用了响应验证,但默认 JSON 序列化程序不会处理它们。该模型带有一个JSONEncoder 类,有助于模型序列化,但它需要连接到create_app

    def create_app():
        connexionApp = connexion.App(__name__, specification_dir='swagger')
        app = connexionApp.app
    
        # This allows the connexion models to be serialized to JSON    
        app.json_encoder = JSONEncoder
    
        # normal configuration
    
        # The return value is a `connexion.Api`.
        # If needed, the api blueprint is available at `connexion.Api.blueprint`
        connexionApp.add_api('swagger.yaml')
    
        return app
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 2019-07-04
      • 2021-05-26
      • 2017-08-20
      • 2016-03-23
      • 2016-02-05
      • 1970-01-01
      相关资源
      最近更新 更多