FastAPI入門 - Python高速API開発

intermediate | 55分 で読める | 2024.12.28

公式ドキュメント

このチュートリアルで学ぶこと

  • FastAPIのセットアップ
  • パスパラメータとクエリ
  • リクエストボディ(Pydantic)
  • 依存性注入
  • 認証とセキュリティ

Step 1: セットアップ

python -m venv venv
source venv/bin/activate
pip install fastapi uvicorn pydantic

Step 2: 基本的なAPI

ポイント: FastAPIはPydanticモデルを使うことで、リクエストボディの自動バリデーションと型変換を行います。型アノテーションがそのままAPIドキュメントに反映されます。

# main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel):
 id: int
 name: str
 email: str

users: list[User] = []

@app.get("/")
def read_root():
 return {"message": "Hello, FastAPI!"}

@app.get("/users")
def get_users():
 return users

@app.get("/users/{user_id}")
def get_user(user_id: int):
 user = next((u for u in users if u.id == user_id), None)
 if not user:
 raise HTTPException(status_code=404, detail="User not found")
 return user

@app.post("/users", status_code=201)
def create_user(user: User):
 users.append(user)
 return user

実践メモ: --reloadオプションを付けると、コード変更時に自動でサーバーが再起動されます。開発中は常に有効にしておきましょう。

Step 3: サーバー起動

uvicorn main:app --reload
# http://localhost:8000
# Swagger UI: http://localhost:8000/docs

Step 4: クエリパラメータ

from typing import Optional

@app.get("/items")
def get_items(
 skip: int = 0,
 limit: int = 10,
 q: Optional[str] = None
):
 items = get_all_items()
 if q:
 items = [i for i in items if q in i.name]
 return items[skip:skip + limit]

Step 5: 依存性注入

依存性注入はFastAPIの強力な機能の一つです。データベース接続の管理やテスト時のモック差し替えが容易になります。

from fastapi import Depends

def get_db():
 db = Database()
 try:
 yield db
 finally:
 db.close()

@app.get("/users")
def get_users(db = Depends(get_db)):
 return db.query(User).all()

Step 6: 認証

注意: OAuth2PasswordBearerはトークンの検証ロジックを自動では行いません。verify_token関数で必ずトークンの有効性・期限・権限を検証してください

from fastapi.security import OAuth2PasswordBearer

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@app.get("/protected")
def protected_route(token: str = Depends(oauth2_scheme)):
 user = verify_token(token)
 return {"user": user}

FastAPIで意識する境界

FastAPIでは、ルーティング関数に処理を詰め込みすぎないことが大切です。リクエストの受け取り、入力検証、ビジネスロジック、データ保存を分けると、あとからテストや変更がしやすくなります。

Pydanticモデルは、単なる型定義ではなくAPIの契約です。入力用、出力用、更新用を分けると、受け取ってよい値と返してよい値を明確にできます。特にパスワードや内部IDなど、返してはいけない情報に注意します。

実装時の確認

  • 入力モデルと出力モデルを分けているか
  • 例外時のレスポンス形式が統一されているか
  • 自動生成されるOpenAPIを確認しているか
  • DB処理をルート関数に直書きしすぎていないか

まとめ

FastAPIは高速で型安全なPython APIフレームワークです。自動ドキュメント生成とPydanticによるバリデーションが魅力です。

参考リソース

← 一覧に戻る
PR
PR
PR
PR