Communitygithub.com

api-design (API設計)

REST、GraphQL、tRPC、gRPCなどのAPI設計・レビュー時に使用します。トリガーワード:API設計、REST、GraphQL、tRPC、gRPC、エンドポイント、スキーマ、ルート、OpenAPI、Swagger、APIバージョニング、ページネーション、APIコントラクト、HTTPメソッド。

api-design (API設計) とは?

このスキルは、REST、GraphQL、tRPC、gRPC といった主要なAPIタイプの設計とレビューを支援する包括的なガイドです。APIの種類の選択基準から、RESTのURL設計規則、HTTPステータスコードの適切な使い分け、レスポンスエンベロープの標準化、バージョニング戦略、ページネーション、フィルタリング・ソート、べき等性の実装までをカバーしています。特にREST APIに焦点を当てつつ、GraphQLのスキーマ設計ルールやAPIセキュリティチェックリストも提供しており、実践的なパターンとコード例が豊富に含まれています。このスキールは、公開API、マイクロサービス間通信、TypeScriptモノレポ、モバイルアプリ向けAPIなど、幅広いユースケースに対応しており、Claude Codeをはじめとする主要なAIエージェントプラットフォームで活用できます。設計段階でのベストプラクティス確認や、既存APIのレビュー時に「API設計」や「REST」、「GraphQL」などのキーワードで自動トリガーされます。

対応~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/jakirhussainkhan/dev-skills/tree/HEAD/.github/skills/api-design

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

API設計

適切なAPIタイプの選び方

タイプ最適な用途避けるべきケース
REST公開API、CRUD、シンプルなクライアント、IoT複雑なネストデータ、頻繁なスキーマ変更
GraphQLモバイルアプリ、複雑なネストデータ、複数クライアントシンプルなCRUD、経験の浅い小規模チーム
tRPCTypeScriptモノレポ、内部のフルスタックTS APITypeScript以外のクライアント、公開API
gRPC高パフォーマンスなマイクロサービス間通信、ストリーミングブラウザクライアント、単純なユースケース

REST API設計

URLの規則

GET    /users              ← 一覧
GET    /users/{id}         ← 単一
POST   /users              ← 作成
PUT    /users/{id}         ← 置き換え
PATCH  /users/{id}         ← 部分更新
DELETE /users/{id}         ← 削除

# ネストされたリソース
GET    /users/{id}/orders
POST   /users/{id}/orders

# アクション(REST動詞で不足する場合)
POST   /orders/{id}/cancel
POST   /users/{id}/activate

HTTPステータスコード

コード使用タイミング
200GET、PUT、PATCHの成功時
201POSTによる作成成功時
204DELETE成功時(ボディなし)
400バリデーション失敗、不正なリクエスト
401認証情報の欠如・不正
403認証済みだが権限なし
404リソースが見つからない
409競合(重複、バージョン不一致)
422処理不能なエンティティ(意味的エラー)
429レート制限超過
500予期しないサーバーエラー

レスポンスエンベロープ

// コレクション
{
  "data": [...],
  "meta": { "total": 100, "page": 1, "perPage": 20 }
}

// 単一リソース
{ "data": { "id": "1", "name": "James" } }

// エラー
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "バリデーションに失敗しました",
    "details": [{ "field": "email", "issue": "不正な形式です" }]
  }
}

API設計原則

バージョニング戦略

# URLバージョニング(最も視認性が高く、ルーティングしやすい)
/v1/users
/v2/users

# ヘッダーバージョニング(クリーンなURL)
Accept: application/vnd.api+json;version=2

既存のクライアントを決して壊さないでください。非推奨にしてから削除します。

ページネーション

# オフセット方式(シンプル、小規模データセットに適する)
GET /posts?page=2&perPage=20

# カーソル方式(大規模データセットで高速、無限スクロールに使用)
GET /posts?cursor=eyJpZCI6MTAwfQ&limit=20

フィルタリングと並び替え

GET /orders?status=pending&userId=123
GET /products?sort=-price,name    # - 接頭辞 = 降順
GET /products?fields=id,name,price  # スパースフィールドセット

べき等性

# 非べき等操作にはべき等キーを含める
POST /payments
Idempotency-Key: unique-client-generated-uuid

GraphQL設計

スキーマ設計規則

  • DB構造ではなくビジネスドメインを記述する
  • リストにはコネクションパターンを使用する(ページネーション対応)
  • ミューテーションは変更されたオブジェクトを返す
  • 有限な値セットには列挙型を使用する
  • すべての型とフィールドに説明を追加する
type Query {
  user(id: ID!): User
  users(filter: UserFilter, pagination: PaginationInput): UserConnection!
}

type Mutation {
  createUser(input: CreateUserInput!): CreateUserPayload!
  updateUser(id: ID!, input: UpdateUserInput!): UpdateUserPayload!
}

type UserConnection {
  edges: [UserEdge!]!
  pageInfo: PageInfo!
  totalCount: Int!
}

APIセキュリティチェックリスト

  • すべてのエンドポイントは認証を必須とする(明示的に公開する場合を除く)
  • ルート単位だけでなく、リソース単位で認可をチェックする
  • すべてのエンドポイントにレート制限を設け、認証エンドポイントにはより厳しい制限をかける
  • すべてのパラメータとボディフィールドに入力バリデーションを実施する
  • 明示的に必要な場合を除き、機密データを返さない
  • CORSは明示的なホワイトリストで設定する
  • 公開前にAPIバージョニング戦略を定義する

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

関連スキル