web-dev-qa-db-ja.com

flask uWSGI Webサーバーを現在使用しているWebアプリケーションをASGI Webサーバーに移行しています(uvicorn)

現在flaskuWSGIWebサーバーを使用するWebアプリケーションがありますWSGI標準を実装し、このアプリをuvicornASGI標準を実装するWebサーバーに移行する必要がある。

Hypercorn、Daphneなどの多くの利用可能なオプションからuvicorn Webサーバーを使用することを選択した場合、この移行を完了するには、Starlette、Quart、Django/Channelsなどの利用可能なオプションから(フラスコではなく)どのWebマイクロフレームワークを選択する必要がありますかスムーズに?

階層は次のようになります。

  Uvicorn: an ASGI server 

        Starlette: (uses Uvicorn) a web microframework

             FastAPI: (uses Starlette) an API microframework with several
                      additional features for building APIs, with data validation, etc.

これまで読んだとおり、

Quartは、Asyncioに基づくPython Webマイクロフレームワークです。特に既存のFlaskアプリで、Webコンテキストでasyncioを使用する最も簡単な方法を提供することを目的としています。

そして

FastAPIは、Python Webフレームワークであることが示されています。これは、Starletteに基づいており、Powerletteを利用しているため、サードパーティのベンチマークによって測定された最高のパフォーマンスの1つです。 https:/ /fastapi.tiangolo.com/benchmarks/

最善のアプローチで提案してください

2
Khushboo Mulani

ここで、これまでに結論したことを追加します。

FastAPIはFlask(およびそのプラグインのいくつか)から、その単純さを含むいくつかのことを学びました。たとえば、ルートを宣言する方法は非常に似ています。これにより、FlaskからFastAPIへの移行が簡単になります(多くの人がそうしているようです)。

FlaskはPython Webフレームワークの現在/古い標準に基づくフレームワークです:WSGI。

FastAPIは、非同期Webフレームワークの新しい標準であるASGIを使用するStarletteに基づいています。

Starletteは、純粋な「マイクロフレームワーク」である点で、Flaskに匹敵します。 Flaskで実行できるほとんどすべての操作は、Starletteで実行できます(FastAPIでも実行できます)。それにもかかわらず、Starletteには、WebSocket、バックグラウンドタスクなど、Flask(または、少なくともデフォルトではDjangoのような他の多くのWSGIフレームワーク)では使用できない機能があります。

FastAPIはStarletteに基づいているため、すべての機能を継承しています。 WebSockets、GraphQLサポート、テンプレートなどを含みます。したがって、FastAPIを使用すると、Flaskで実行できるほぼすべてのことを実行できます。

FastAPIはマイクロフレームワークでもあります(APIにいくつかの追加機能が含まれているため、ミニフレームワークかもしれません)。したがって、プロジェクトを好きなように構成できます。多くの場合、Flaskプロジェクトの同じファイルのほとんどを使用することもできます(私はそれを実行しました)。

これはこの驚くべき記事で説明されています: https://www.quora.com/What-are-the-advantages-of-using-FastAPI-over-flask

また、Python 3.7および3.6の高性能FastAPI Webアプリケーション向けにGunicornが管理するUvicornを備えたDockerイメージは、最小限の実装で使用できます。 https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker

2
Khushboo Mulani

これは主に個人的な意見に依存するため、これに対する正しい答えがあるかどうかはわかりません。

Quartが既存のFlaskアプリからの最も簡単な移行を提供するだろうと個人的に信じています。これは、Quart APIをFlaskと意図的に同じにしたためですAPIにより、Flaskアプリについてすでに理解していることがすべて、Quartアプリにも適用されます。これにより、フレームワークではなく非同期/待機の概念の学習に集中できるようになることを願っています。

私はあなたがあなたがそれをするために必要なことはフレームワークを超えていること、そしてあなたがそれを行うことができるようにする拡張が存在するかどうかを考えることによってあなたの答えを見つけるでしょう。 Flaskエコシステムと比較して、すべてのASGIフレームワークのエコシステムは小さいです。

2
pgjones

FastAPIはFlaskに匹敵しません。それはFlask-RESTPlusのようなものに匹敵します。

StarletteはFlaskとの公平な比較です。 Starletteは、Quart、Sanic、Bocadilloなどと同様に、最新の標準を採用しています。

最良のアプローチについては...あるフレームワークから別のフレームワークにアプリを移行するのは簡単なことです。
FastAPIの作成者が推奨するため、どちらの方法でも(Uvicornワーカークラスを使用して)Gunicornを使用します。

0
Vasili Syrakis