FastAPI は、PythonのでAPI を構築するためのモダンで高速(高パフォーマンス)なWebフレームワークです。
DjangoやFlaskよりも格段に高速で、GolangのGinと同等の速度を出すことができます。
またFlaskと同じような書き方のためFlaskを使用している企業や理解できる人は容易に導入することができます。
FastAPIとは?Pythonの高速APIの正体は?
- FastAPIとはPythonで書かれている比較的新しいWebAPIのフレームワークです。
- Pythonは遅い!という常識を覆すようにGo言語やNode.jsと言われています。
- 高速化の要因はStarlette(ASGI Framework)と Pydantic(型のチェックとシリアライズ)です。
- 書き方はシンプルでFlaskのように書くこと(またはDjangoのファンクションベース)ができます。
- フロントエンド+APIの方式でWebアプリやネイティブアプリをシンプルな開発が期待できます。
FastAPIのメリット
FastAPIのメリットは以下があります。
では詳細を紹介していきたいと思います。
他のPythonのWebフレームワークより高速
FastAPIはDjango、Flask、Bottleと比較しても圧倒的に高速です。以下の図では数値が高いほど高速という図になリます。
参考URL:Why did we choose FAST API over Flask and Django for our RESTFUL Micro-services
上の図を見るとFastAPIの速度が速いのがわかります。Pythonは使いやすいです言語ですが遅いと言われます。
開発が比較的に容易
FastAPIはFlaskに似たコーディングができ、シンプルにコーディングできます。Flaskを扱える人は容易に利用することができます。
以下が最もシンプルなAPIの内容です。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
次にFlaskのWebアプリです。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
対照的にDjangoでのHelloWorldはいくつかものファイルを修正する必要があります。この記事では割愛しますがそれぞれのWebフレームワークでHello World記事は以下になります。
型付けを行うためバグが少なく開発可能
pydanticというバリデーターを使うことで返す時のデータ、データベースにデータ作成、アップデートするときのエラーを少なくすることができます。
公式ドキュメントに日本語
公式ドキュメントに日本語があります。
他のフレームワークを使いたかった時に日本語の説明がなくて難しいと感じたことはあると思います。
APIのdocument generatorが機能がある
FastAPIではデフォルトでAPIのドキュメント自動生成機能のdocument generator機能があります。document generatorは Swagger-UIで提供されており簡単にAPI利用をすることができます。
FastAPIのデメリット
FastAPIのデメリットは以下があります。
では詳細を紹介していきたいと思います。
デフォルトだと機能が少ないのでライブラリを選択する必要がある
FastAPIのとにかく軽量なフレームワークであるためDB接続や認証などの機能は別に容易する必要があります。
ただしDB接続にはSQLAlchemyや認証機能にはpython-joseと公式マニュアルにきちんと記載されておりますので利用することは可能です。
コミュニティーが小さいためナレッジが少ない
FastAPIは2018年にできたばかりのフレームワークなのでコミュニティー規模が小さいことが一番のデメリットです。
ドキュメントやナレッジが少ないことから自身で検証する必要があり、開発に大きく
コミュニティー層が小さいです
FastAPIのまとめ
メリット
・API速度が速い(Django・Flask比較)
・シンプルでソースコード量が少なく開発できる
・APIのオープンスタンダートに基づいてる
・オフィシャルの説明に日本語バージョンがある
デメリット
・Webページの生成はできない
・機能が少なくライブラリを導入する必要がある
・コミュニティーが小さくまだまだナレッジが少ない