python-api-endpoint-creator について
FastAPI のレイヤー構成に沿った REST API エンドポイントを作成する開発スキルです。新規エンドポイントやドメインモジュールを作る開発者向けに、非同期処理やソフトデリートを含むルーター、サービス、リポジトリ、テストの構成を示します。
主な機能
- 01Pydantic スキーマと SQLAlchemy モデルの生成
- 02非同期 CRUD リポジトリとサービスの構成
- 03依存関係と薄いルーターの作成
- 04httpx AsyncClient テストの生成
- 05ソフトデリートとレスポンスモデルのルール
活用シーン
- 01REST API エンドポイントの新規作成
- 02ドメインエンティティへの CRUD 追加
- 03テスト付きレイヤーモジュールの構築
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ c0x12c/ ai-toolkit --skill python-api-endpoint-creatorインストール後、Claude Code で/python-api-endpoint-creatorを入力して読み込まれたか確認します。
同梱ファイルcode-patterns.md
詳細
Python API エンドポイント作成ツール
厳格なレイヤードアーキテクチャのパターンに従って、完全な FastAPI エンドポイントを作成します。
使用する場面
- REST API エンドポイントをゼロから新規作成する
- 新しいドメインエンティティに CRUD 操作を追加する
- Router → Service → Repository → Tests のフルスタックを構築する
- 新しいドメインモジュールをスキャフォールディングする
プロセス
- Pydantic スキーマ —
schemas.pyに Create/Update/Response を作成します - SQLAlchemy モデル —
models.pyに SoftDeleteMixin を使用して作成します - リポジトリ —
repository.pyにソフトデリート対応の非同期 CRUD を実装します - サービス —
service.pyにビジネスロジックとエラー用の HTTPException を実装します - 依存関係 —
dependencies.pyにget_db、get_serviceを定義します - ルーター —
router.pyに薄いエンドポイントを作成し、すべてに Depends() を使用します - テスト —
tests/に httpx AsyncClient テストを作成します
各ファイルの完全なテンプレートについては、code-patterns.md を参照してください。
アーキテクチャ
Router (APIRouter) → Service → Repository → Database
↓ ↓ ↓
Depends() Business logic SQLAlchemy
Pydantic schemas HTTPException AsyncSession
Status codes Validation Soft delete
厳守するルール
- すべての変更操作に POST を使用する — 読み取りには GET、作成/更新/削除には POST を使用します
- ID にはクエリパラメーターを使用する —
?id=xxxを使用し、パスパラメーター/{id}は使用しません - ルーターは薄く保つ — 委譲のみとし、ビジネスロジックを含めません
- サービスで HTTPException を発生させる — 想定されるエラー(404、409、422)に対して使用します
- リポジトリでソフトデリートを処理する — すべてのクエリで
deleted_at.is_(None)によるフィルタリングを行います - すべてのエンドポイントに
async defを使用する — CPU バウンドの場合を除きます
注意点
-
response_modelを忘れると、API から内部フィールドが漏えいします。 エンドポイントには必ずresponse_model=YourSchemaを設定してください。設定しない場合、FastAPI は戻り値をそのままシリアライズするため、SQLAlchemy モデルのhashed_password、deleted_atなどの内部フィールドが含まれる可能性があります。 -
Depends()はリクエストごとに新しいインスタンスを作成します。シングルトンではありません。 サービスが状態を保持する場合、リクエスト間でその状態は失われます。サービスはステートレスにしてください。共有状態が必要な場合は、アプリの状態またはキャッシュを使用します。 -
await db.commit()はリポジトリではなく依存関係内で実行してください。get_db依存関係がコミットとロールバックを処理します。リポジトリ内でもコミットすると、二重コミットのバグや、すべての操作が完了する前の早すぎるコミットが発生します。 -
Pydantic の 422 エラーは、デフォルトでは詳細が不明瞭です。
RequestValidationErrorハンドラーをオーバーライドして、フィールドごとのエラーを返すようにします。デフォルトでは「validation error」とだけ表示され、フロントエンドにとって有用な詳細情報がありません。 -
作成エンドポイントに
status_code=201を設定し忘れないでください。 FastAPI のデフォルトは 200 です。POST の作成ルートにはstatus_code=status.HTTP_201_CREATEDを、削除ルートにはstatus_code=status.HTTP_204_NO_CONTENTを明示的に設定してください。