api-design について
エンドポイント、リクエストとレスポンスの形式、ステータスコード、バージョン管理、セキュリティを扱う、開発者向けのREST API設計リファレンスです。
主な機能
- 01HTTPメソッドとURLの指針
- 02ステータスコードの指針
- 03コレクションとエラーの形式
- 04フィルタリング、ソート、ページネーション
- 05冪等性とバージョン管理
- 06入力検証とセキュリティの指針
活用シーン
- 01CRUDエンドポイントの設計
- 02APIエラーレスポンスの標準化
- 03ページネーションと絞り込みの追加
- 04APIの破壊的変更の計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ eddiebe147/ claude-settings --skill api-designインストール後、Claude Code で/api-designを入力して読み込まれたか確認します。
詳細
REST API 設計原則
URL 構造
GET /api/v1/resources # List all
GET /api/v1/resources/{id} # Get one
POST /api/v1/resources # Create
PUT /api/v1/resources/{id} # Replace
PATCH /api/v1/resources/{id} # Partial update
DELETE /api/v1/resources/{id} # Delete
# Nested resources
GET /api/v1/parents/{id}/children
POST /api/v1/parents/{id}/children
HTTP ステータスコード
| コード | 意味 | 使用する場面 |
|---|---|---|
| 200 | OK | GET、PUT、PATCH が成功した場合 |
| 201 | 作成済み | POST が成功した場合(新しいリソース) |
| 204 | コンテンツなし | DELETE が成功した場合 |
| 400 | 不正なリクエスト | 検証エラー、不正な形式のリクエスト |
| 401 | 認証されていません | 認証情報がない、または無効な場合 |
| 403 | 禁止 | 認証は有効だが、権限がない場合 |
| 404 | 見つかりません | リソースが存在しない場合 |
| 409 | 競合 | 重複、状態の競合 |
| 422 | 処理できません | 意味上のエラー |
| 500 | サーバーエラー | 予期しないエラー |
リクエスト/レスポンスの設計
コレクションのレスポンス
{
"data": [...],
"pagination": {
"page": 1,
"pageSize": 20,
"totalItems": 150,
"totalPages": 8
}
}
単一リソースのレスポンス
{
"id": "uuid",
"name": "Resource Name",
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T11:00:00Z"
}
エラーレスポンス
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Name is required",
"details": [
{"field": "name", "message": "must not be blank"}
]
}
}
クエリパラメーター
# Filtering
GET /api/v1/resources?status=active&type=premium
# Sorting
GET /api/v1/resources?sort=createdAt,desc
# Pagination
GET /api/v1/resources?page=1&pageSize=20
# Field selection
GET /api/v1/resources?fields=id,name,status
# Search
GET /api/v1/resources?search=query
冪等性
- 一意の識別子を使う POST では、重複がある場合に既存のリソースを返します(200)
- PUT/DELETE は冪等にします
- 作成済みか既存かを示すには、
Pair<Result, Boolean>パターンを使用します
バージョン管理
- URL パスによるバージョン管理を使用します:
/api/v1/、/api/v2/ - 破壊的変更を行う場合はバージョンを更新します
- 移行期間中は旧バージョンをサポートします
セキュリティ上の考慮事項
- API の境界で常に入力を検証します
- パラメーター化クエリを使用します(JOOQ が処理します)
- サービス層で認可を確認します
- 内部 ID や機密データを決して公開しません
- 公開エンドポイントにはレート制限を設けます
コメント
Markdown 対応