PythonでAPIを作るなら
そもそもAPIを作るのにPythonである必要があるのかどうか、ということはかなり議論の余地がありそうですがPythonは何といってもほかの言語と比べて書きやすい!読みやすい!言語であり初心者に優しい言語です(個人の感想です)
他にも機械学習やデータの処理などPythonが得意としている分野の処理を組み込む予定があればPythonでAPIを作る需要はある程度あるのではないでしょうか
なぜFastAPIの何が魅力的か
1. 高速で型安全:
- FastAPIはASGI(Asynchronous Server Gateway Interface)を採用しており、非同期処理により高いパフォーマンスを提供します。
- Pydanticを使用してリクエストやレスポンスの型ヒントを提供することで、型安全性が向上します。
(公式ホームページ曰く、Go言語にも匹敵する速さだとか)
かなり早いといわれているGo言語に匹敵することはかなり魅力的なのではないでしょうか
(この記事では実行速度の比較までは扱いません...)
2. 自動生成されたドキュメンテーション:
- FastAPIはSwagger UIとReDocをサポートしており、APIエンドポイントのドキュメンテーションを自動生成します。
この機能のおかげて、ブラウザ上で動作テストができます、ログイン機能を実装してエンドポイントごとに制限をかける場合でもドキュメント上でログインしてAPIを実行することができます!
フロントエンド実装前やちょっと動作確認したいときにはとても重宝します
本番環境ではこの機能をオフにすることを強く推奨します
app = FastAPI(docs_url=None, redoc_url=None, openapi_url=None)
で無効化することができます
3. データバリデーションとシリアライゼーション:
- Pydanticを使用して、リクエストのデータバリデーションとレスポンスのシリアライゼーションを簡単に行うことができます。
これによって、意図しないデータの入力が防げるので入力データの整合性が保たれ、安全性が向上します。
なぜFastAPIなのか
1. Flask
- Flaskはシンプルで軽量なWebフレームワークであり、初学者向けや小規模なプロジェクトに適しています。
- 一方でFastAPIは非同期処理や型安全性など、より高度な機能を提供します。
2. Django
- Djangoは全体的なWeb開発フレームワークであり、ORMやテンプレートエンジンなどが組み込まれています。
一方でFastAPIはAPI開発に特化しており、高速な処理や型安全性が強調されています。
(大規模なプロジェクトだとDRFがよく使われているイメージです)
3. Express (Node.js)
- ExpressはNode.jsのWebフレームワークであり、非同期処理や柔軟性があります。
- FastAPIとの違いは言語であり、Pythonを使用するかどうかが大きな違いです。
Pythonの開発経験がある場合は、FastAPIをお勧めします
FastAPIでHelloWorld
-
FastAPIのインストール:
$ pip install fastapi uvicorn
-
HelloWorldアプリケーションの作成:
# main.py from fastapi import FastAPI app = FastAPI() # エンドポイントパスとメソッドの定義 @app.get("/") # 引数がある場合はここで定義する def read_root(): return {"Hello": "World"}
-
Uvicornを使用してアプリケーションの実行:
$ uvicorn main:app --reload
-
ブラウザまたはcurlを使用して確認:
- http://127.0.0.1:8000/ にアクセスするか、以下のようにcurlを使用して確認できます。
$ curl http://127.0.0.1:8000/
これでFastAPIのHelloWorldが完成しました。
この例では、"/"エンドポイントにアクセスすると{"Hello": "World"}というJSONが返されることが確認できます
終わりに
今回は、簡単にFastAPIの布教をさせていただきました
プロジェクトにあった技術選定をするためにもいろいろなフレームワークに触っておきたいですね