はじめに
PythonのFastAPIは、Web APIを高速かつ効率的に開発するためのモダンなフレームワークです。型ヒントを活用したシンプルで直感的な設計と、高速な動作が特徴で、非同期処理にも対応しています。
この記事では、FastAPIの基本的な使い方、Web APIの作成方法、さらに高度な応用までをわかりやすく解説します。
FastAPIとは
FastAPIの概要
FastAPIは、Pythonで高速なWeb APIを開発するためのフレームワークで、以下の特徴を持っています:
- 高速なパフォーマンス
非同期I/O(asyncio)を活用し、高速なリクエスト処理が可能。 - 型ヒントを活用
Pythonの型ヒントを利用することで、堅牢でメンテナンスしやすいコードを実現。 - 自動ドキュメント生成
OpenAPIとJSON Schemaに基づいたAPIドキュメントが自動生成されます。
FastAPIの主な特徴
- 高いパフォーマンス
Node.jsやGoに匹敵するパフォーマンスを発揮します。 - 直感的なコーディング
型ヒントやデコレーターを活用して、シンプルかつ明確なコードを書くことができます。 - 優れた開発者体験
自動生成されるAPIドキュメントで開発がスムーズ。 - 非同期処理対応
asyncioを活用した非同期APIの構築が可能です。
FastAPIのインストールとセットアップ
FastAPIのインストール
以下のコマンドでFastAPIをインストールします:
pip install fastapi uvicorn
補足:uvicorn
はASGIサーバーで、FastAPIアプリケーションを起動するために必要です。
インストール確認
以下のコードを実行して、FastAPIが正しくインストールされているか確認します:
import fastapi
print(fastapi.__version__)
FastAPIアプリケーションの基本構造
FastAPIアプリケーションは、以下のコンポーネントで構成されます:
- アプリケーションの作成
- ルーティングの定義
- リクエストとレスポンスの処理
- アプリケーションの起動
基本構造の例
以下は、FastAPIアプリケーションの基本的なコード例です。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, FastAPI!"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
説明:
- アプリケーションの作成
FastAPI()
でアプリケーションを作成します。 - ルート定義
@app.get("/")
でルート/
に対するGETリクエストを定義します。 - 非同期ハンドラー
async def
を使い、非同期処理を定義します。 - アプリの起動
uvicorn
でアプリケーションを起動します。
FastAPIの主要機能
パスパラメータ
URLパスから動的な値を取得できます。
例:パスパラメータの使用
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
アクセス例:
http://localhost:8000/items/123
クエリパラメータ
URLに付加されたクエリ文字列を取得できます。
例:クエリパラメータの使用
@app.get("/search/")
async def search_items(q: str = "default"):
return {"query": q}
アクセス例:
http://localhost:8000/search/?q=FastAPI
リクエストボディ
POSTリクエストのJSONデータを受け取ることが可能です。
例:リクエストボディの処理
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
@app.post("/items/")
async def create_item(item: Item):
return {"item_name": item.name, "item_price": item.price}
リクエスト例:
{
"name": "Apple",
"price": 1.2
}
レスポンスモデル
Pydanticモデルを使用してレスポンスの型を定義できます。
例:レスポンスモデルの使用
@app.get("/items/{item_id}", response_model=Item)
async def read_item(item_id: int):
return {"name": "Apple", "price": 1.2}
自動生成されるAPIドキュメント
FastAPIは、Swagger UIとReDocによる自動ドキュメント生成をサポートしています。
アクセス方法:
- Swagger UI:
http://localhost:8000/docs
- ReDoc:
http://localhost:8000/redoc
FastAPIの応用例
RESTful APIの構築
FastAPIは、CRUD操作を含むRESTful APIの構築に最適です。
items = {}
@app.post("/items/")
async def create_item(name: str, price: float):
item_id = len(items) + 1
items[item_id] = {"name": name, "price": price}
return {"item_id": item_id}
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return items.get(item_id, {"error": "Item not found"})
WebSocketサポート
リアルタイム通信にWebSocketを活用できます。
例:WebSocketの使用
from fastapi.websockets import WebSocket
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"受信: {data}")
FastAPIを使う際の注意点
- 型ヒントの活用
FastAPIでは型ヒントを活用することで、エラーを防ぎやすくなります。 - 非同期処理の設計
非同期処理を前提として設計すると、パフォーマンスが向上します。 - セキュリティの考慮
認証・認可機能を適切に設定し、APIのセキュリティを確保しましょう。
まとめ
FastAPIは、高速で効率的なWeb API開発を可能にするPythonフレームワークです。非同期処理や自動ドキュメント生成といった特徴を活用することで、開発スピードが大幅に向上します。この記事を参考に、FastAPIを活用してモダンなWeb APIを構築してみてください!