2017-01-16 2 views
3

Я заинтересован в интеграции генерируемого Python-сервера swagger-codegen с существующим приложением Flask. swagger-codegen генерирует реализацию Python на основе библиотеки Connexion от Swagger API specification.Интеграция с Python-сервером Swagger/OpenAPI с существующим флеш-приложением

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 является базовым приложением. Одним из вариантов может быть, чтобы достичь в и расширить применение Connexion колба, возможно, что-то вроде этого:

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 Колба кажется проще, чем интеграция голый план из connexion.Api в мой существующий Колба приложение , Тем не менее, я не могу легко сказать, предназначен ли Connexion для того, чтобы хорошо играть с управляемыми чертежами, не связанными с Connexion.

Каков наилучший способ интегрировать API Connexion Swagger в существующем традиционном приложении Flask? Кто-нибудь пошел по этому пути?

ответ

2

Он работает, чтобы создать connexion.App, а затем продлить экземпляр Flask от connexion.App(...).app.

Проще всего придерживаться 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 
Смежные вопросы