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

2024-05-19 10:23:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有兴趣将swagger-codegen生成的Python服务器与现有的Flask应用程序集成。^{}^{}生成基于^{}库的Python实现。在

我发现的examples似乎都希望^{}管理整个flask应用程序。在

import connexion

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

但是,我有现有的蓝图、配置和sqlalchemy模型,我想与生成的connexionapi集成。看起来connexion.App.app是底层的Flask应用程序。一种选择可能是进入并扩展连接烧瓶应用程序,可能如下所示:

^{pr2}$

尝试搭载大量定制的connexionflask应用程序似乎比将^{}中的裸蓝图集成到我现有的Flask应用程序中更简单。然而,我不能很容易地判断Connexion是否被设计成可以很好地使用非Connexion管理的蓝图。在

在现有的传统烧瓶应用程序中集成connexionswagger定义的API的最佳方法是什么?有人走这条路吗?在


Tags: import服务器apiapp应用程序flask烧瓶swagger
1条回答
网友
1楼 · 发布于 2024-05-19 10:23:57

它的工作原理是创建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

相关问题 更多 >

    热门问题