gpt4 book ai didi

python - 将 Swagger/OpenAPI 生成的 python 服务器与现有的 Flask 应用程序集成

转载 作者:太空狗 更新时间:2023-10-29 21:48:41 25 4
gpt4 key购买 nike

我有兴趣将 swagger-codegen 生成的 Python 服务器与现有的 Flask 应用程序集成。 swagger-codegen基于 Connexion 生成一个 Python 实现来自 Swagger API specification 的图书馆.

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 管理的蓝图很好地配合。

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

最佳答案

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

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

一个问题是连接模型似乎是 Controller 所期望的,尤其是在启用了响应验证的情况下,但默认的 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

关于python - 将 Swagger/OpenAPI 生成的 python 服务器与现有的 Flask 应用程序集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41677514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com