mcpField
A
api-design

api-design

github.com/pixel-process-ug開発383 回インストール34 週間前に更新
リポジトリ

api-design について

実装前の API 設計を支援するガイド型スキルです。リソースや利用者、制約を整理してエンドポイントを設計し、レビュー用の OpenAPI ドキュメントを作成します。

主な機能

  1. 01リソースと API 利用者の整理
  2. 02REST、GraphQL、tRPC の選択支援
  3. 03エンドポイントのリクエストとレスポンス設計
  4. 04一貫したエラー形式とページネーション
  5. 05OpenAPI 仕様の生成

活用シーン

  1. 01実装前の新しい API の計画
  2. 02API 利用者に合わせたエンドポイント設計
  3. 03認証、エラー、ページネーションの文書化
  4. 04レビュー用 OpenAPI 仕様の作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pixel-process-ug/superkit-agents --skill api-design

インストール後、Claude Code で/api-designを入力して読み込まれたか確認します。

詳細

API 設計

概要

ガイド付きの探索を通じて、構造化された API エンドポイントを設計します。OpenAPI/Swagger 仕様に基づく、一貫性のある十分に文書化された API 設計を作成します。リソースのモデリング、認証、ページネーション、エラー処理、バージョニングを網羅し、実装を始める前にコンシューマー中心の設計を確立します。

開始時に伝えること: 「API の設計に api-design スキルを使用します。」

フェーズ 1:探索

次の質問を1つずつ尋ねます。

リソースに関する質問
#質問判断する内容
1この API が管理するエンティティ/リソースは何ですか?リソースの命名
2それらの間にはどのような関係がありますか?ネストされたルート、インクルード
3それぞれにどのような操作が必要ですか?(CRUD、検索、一括処理)HTTP メソッド、エンドポイント
コンシューマーに関する質問
#質問判断する内容
4この API を利用するのは誰ですか?(フロントエンド、モバイル、サードパーティ、社内)レスポンスの形式、認証モデル
5どのような認証/認可が必要ですか?セキュリティスキーム
6適用されるレート制限やクォータはありますか?レート制限ヘッダー
制約に関する質問
#質問判断する内容
7REST、GraphQL、tRPC のどれを使いますか?API のパラダイム
8バージョニング戦略は何ですか?(URL パス、ヘッダー、クエリパラメーター)URL の構造
9ページネーション方式は何ですか?(カーソル、オフセット、キーセット)リストレスポンスの形式
10コードベースに既存の API 規約はありますか?一貫性に関する制約
API パラダイムの判断表
要素REST を選択GraphQL を選択tRPC を選択
コンシューマー複数で多様フロントエンド中心で、柔軟なクエリが必要TypeScript のモノレポ
キャッシュの必要性高い(HTTP キャッシュ)中程度(クライアント側)低い(内部利用のみ)
データの形状予測可能で、リソース指向ネストされ、形状が可変型安全な RPC
チームの習熟度広く普及スキーマの知識が必要TypeScript が必要
リアルタイムの必要性WebSocket アドオンサブスクリプションを標準搭載サブスクリプションをサポート

探索が終わったら停止し、リソース、操作、制約の概要を提示します。エンドポイントの設計に進む前に確認を得ます。

フェーズ 2:エンドポイントの設計

各エンドポイントについて、以下を定義します。

### [METHOD] /api/v1/[resource]

**Purpose:** [what this endpoint does]

**Request:**
- Headers: `Authorization: Bearer <token>`
- Query params: `?page=1&limit=20&sort=created_at:desc`
- Body:
  ```json
  {
    "field": "type — description"
  }

レスポンス(200):

{
  "data": [...],
  "meta": { "total": 100, "page": 1, "limit": 20 }
}

エラーレスポンス:

ステータスコード説明
400VALIDATION_ERRORリクエストボディが無効です
401UNAUTHORIZEDトークンがないか、無効です
404NOT_FOUNDリソースが存在しません
409CONFLICTリソースはすでに存在します

認可:[アクセスできるユーザー]


### HTTP Method Decision Table

| Operation | Method | Status (success) | Idempotent |
|-----------|--------|-----------------|------------|
| List resources | GET | 200 | Yes |
| Get single resource | GET | 200 | Yes |
| Create resource | POST | 201 | No |
| Full replace | PUT | 200 | Yes |
| Partial update | PATCH | 200 | No |
| Delete resource | DELETE | 204 | Yes |
| Bulk create | POST | 201 | No |
| Search (complex) | POST | 200 | Yes (safe) |

### Pagination Decision Table

| Approach | When to Use | Pros | Cons |
|----------|------------|------|------|
| **Cursor** | Real-time feeds, large datasets | Consistent, no skipping | Cannot jump to page N |
| **Offset** | Small datasets, admin panels | Simple, jumpable | Skips/duplicates on insert |
| **Keyset** | Time-series, logs | Efficient on large tables | Requires sortable key |

### Error Response Format

All endpoints must use a consistent error shape:

```json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Human-readable description",
    "details": [
      { "field": "email", "message": "Invalid email format" }
    ]
  }
}
ステータスコードの参照表
コード意味使用する状況
200OKGET、PUT、PATCH が成功した場合
201作成済みリソースを作成する POST が成功した場合
204コンテンツなしDELETE が成功した場合
400不正なリクエスト検証に失敗した場合
401認証されていない認証情報がないか、無効な場合
403禁止認証情報は有効だが、権限が不十分な場合
404見つからないリソースが存在しない場合
409競合重複または状態の競合がある場合
422処理できないエンティティJSON は有効だが、意味上のエラーがある場合
429リクエストが多すぎるレート制限を超過した場合
500内部サーバーエラー予期しないサーバー障害が発生した場合

エンドポイントの設計が終わったら停止し、各エンドポイントを提示してレビューと承認を得ます。

フェーズ 3:OpenAPI 仕様の生成

openapi: 3.1.0
info:
  title: [API Name]
  version: 1.0.0
  description: [API description]

servers:
  - url: http://localhost:3000/api/v1
    description: Development
  - url: https://api.example.com/v1
    description: Production

paths:
  /resource:
    get:
      summary: List resources
      parameters: [...]
      responses: [...]
    post:
      summary: Create resource
      requestBody: [...]
      responses: [...]

components:
  schemas: [...]
  securitySchemes: [...]

仕様の生成後に停止し、YAML を検証して最終承認のために提示します。

フェーズ 4:保存と次の作業への移行

明示的な承認を得た後:

  1. OpenAPI 仕様を docs/api/YYYY-MM-DD-<api-name>.yaml に保存します
  2. コミットメッセージを docs(api): add OpenAPI spec for <api-name> としてコミットします
  3. ユーザーの意図に基づいて次のステップを決定します
遷移判断表
ユーザーの意図次のスキル理由
「これを実装しましょう」planningAPI 仕様から実装計画を作成します
「これの仕様を書いてください」spec-writing各エンドポイントの動作仕様を作成します
「クライアント SDK を生成してください」手動OpenAPI コード生成ツールを使用します
「設計を保存するだけです」なしAPI 設計が成果物です
「テストを追加してください」testing-strategyAPI のテスト方針を定義します

設計原則

原則ルール
一貫した命名コレクションには複数形の名詞を使います(/user ではなく /users)
適切な HTTP メソッドGET は読み取り、POST は作成、PUT は置換、PATCH は更新、DELETE は削除に使います
適切なステータスコード状況に合ったコードを使用します(上の表を参照)
一貫したエラー形式すべてのエンドポイントで同じエラー形式を使います
デフォルトでページネーションすべてのリストエンドポイントにページネーションを設定します
フィルタリングと並べ替えリストエンドポイントにはクエリパラメーターを使います
冪等性PUT と DELETE は常に冪等です
HATEOAS発見しやすいようにリンクを含めます(適切な場合)

アンチパターン/よくある間違い

間違い問題点代わりに行うこと
動詞ベースの URL(/getUsers)RESTful ではなく、慣習にも反します名詞を使います:GET /users
単数形と複数形の不統一利用者を混乱させますコレクションには必ず複数形を使います
エラーに対して 200 を返すクライアントから障害が見えなくなります適切なステータスコードを使います
リストエンドポイントにページネーションがない大規模なデータセットでパフォーマンスの問題が発生します必ずページネーションを設定します
エンドポイントごとに異なるエラー形式クライアントで汎用的なエラー処理を構築できませんすべてに共通のエラー形式を使います
URL で内部 ID を公開するセキュリティと密結合のリスクがありますUUID またはスラッグを使います
バージョニング戦略がない破壊的変更によってクライアントに問題が生じます最初からバージョンを付けます
利用者を把握せずに設計するAPI が誰にとっても使いにくくなりますまず調査を行います

不適切な正当化を防ぐための注意事項

  • 決して調査フェーズを省略しないでください。まず利用者と制約を把握します
  • 決してエラー応答を定義せずにエンドポイントを設計しないでください
  • 決してリストエンドポイントのページネーションを省略しないでください
  • 決してエンドポイント間で一貫性のない命名を使わないでください
  • 決してユーザーがエンドポイント設計を承認する前に OpenAPI 仕様を生成しないでください
  • 決して明確な理由なく API パラダイム(REST + GraphQL)を混在させないでください

統合ポイント

スキル関係
spec-writing下流:API 設計が動作仕様に反映されます
planning下流:API エンドポイントが実装タスクになります
tech-docs-generator下流:OpenAPI 仕様が API リファレンスドキュメントに活用されます
testing-strategy下流:API 設計が統合テスト戦略に反映されます
security-review下流:認証/認可モデルの脆弱性をレビューします
database-schema-design上流:データモデルがリソース設計に反映されます
prd-generation上流:PRD の要件が API リソースの特定につながります

検証ゲート

API 設計が完了したと判断する前に:

  1. すべてのエンドポイントにリクエスト/レスポンスのスキーマがあることを検証します
  2. すべてのエラー応答が一貫した形式で文書化されていることを検証します
  3. 各エンドポイントの認証が指定されていることを検証します
  4. すべてのリストエンドポイントでページネーションが定義されていることを検証します
  5. OpenAPI 仕様が有効な YAML であることを検証します
  6. ユーザーが各エンドポイントを個別に承認したことを検証します

スキルの種類

柔軟 — 調査を優先するアプローチ、一貫したエラー処理、利用者中心の設計原則を保ちながら、API パラダイム、ページネーション方式、認証モデルをプロジェクトのニーズに合わせて調整します。

コメント