agentsclimarketplace

Api design

Skill tdyzzsp47/claude-skills/skills/api-design

システム開発・個人開発の全工程(企画〜設計〜実装〜運用〜マネタイズ)をカバーするClaude Code用スキル集

Install
npx -y skills add tdyzzsp47/claude-skills --skill api-design

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

RESTを中心にAPI設計の全工程(リソース設計・エラー仕様・バージョニング・スキーマファースト)を体系的に進めるスキル。新規API定義・既存APIの見直し・GraphQL/gRPC選択判断が必要なときに使う。

SKILL.md

9.5 KB, as published. Nobody here has run it

API設計

目的

一貫性・拡張性・使いやすさを兼ね備えたAPIを、スキーマファーストで設計する。 OpenAPIで契約を先に固定し、サーバーとクライアントの並列実装を可能にする。

使うタイミング

  • 新規サービスのエンドポイント定義を始めるとき
  • 既存APIにフィールド追加・削除・型変更などの変更を加えるとき
  • GraphQL/gRPCとRESTのどちらを採用するか判断するとき
  • クライアントチームとの接続仕様を合意するとき

進め方

  1. プロトコル選定: REST/GraphQL/gRPCの選択基準を確認し決定する
  2. リソース洗い出し: ドメインオブジェクトを名詞(複数形)でリストアップする
  3. エンドポイント一覧作成: メソッド・パス・認証要否・主なパラメータ・レスポンス概要を表にまとめる
  4. エラー仕様策定: 使用するHTTPステータスとエラーレスポンス形式を全体で統一する
  5. OpenAPI定義作成: エンドポイント一覧と仕様を.yamlで記述する(スキーマファースト)
  6. モック生成: OpenAPIからモックサーバーを立ち上げ、クライアントチームに渡す
  7. レビュー: チェックリストで一貫性・冪等性・後方互換性を確認する
  8. 実装委譲: スキーマが固定したらサーバー実装とクライアント実装を並列エージェントに委譲する

設計の要点

プロトコル選定

プロトコル採用場面
RESTデフォルト。外部公開API・シンプルなCRUD・迷ったらこれ
GraphQLクライアント多様(Web/モバイル)・取得形状が多様・アンダーフェッチ/オーバーフェッチが問題になるとき
gRPC内部サービス間通信・低レイテンシ・型安全なストリーミングが必要なとき

リソース指向設計

  • URLは名詞(複数形): /users, /orders, /products
  • 操作はHTTPメソッドで表現: GET(取得) / POST(作成) / PUT(全更新) / PATCH(部分更新) / DELETE(削除)
  • ネストは1階層まで: /users/{id}/orders はOK、/users/{id}/orders/{oid}/items/{iid} は避ける
  • 深いネストはフラット化: /order-items?order_id={oid} など

一貫性の確保

  • 命名はプロジェクト全体で統一: snake_casecamelCaseかを決めて全エンドポイントで守る
  • ページネーション方式を統一: offsetベース(?offset=0&limit=20)またはカーソルベース(?cursor=xxx&limit=20)のどちらかに統一
  • フィルタ・ソート規約を統一: ?filter[status]=active, ?sort=-created_at のような形式を決める

レスポンス設計

  • エンベロープを一貫させる: 単件は{"data": {...}}、一覧は{"data": [...], "meta": {"total": 100}}
  • 日時: ISO 8601 UTC形式 (2025-01-15T09:00:00Z)
  • 金額: 文字列("1980")または最小単位の整数(1980円→1980)で扱い、浮動小数点を避ける

HTTPステータスの正しい使用

コード意味
200成功(GETなど)
201作成成功(POST)
204成功・レスポンスボディなし(DELETE等)
400リクエスト不正(バリデーションエラー等)
401未認証(トークンなし・期限切れ)
403権限なし(認証済みだがアクセス不可)
404リソースが存在しない
409競合(重複登録等)
422意味的に処理不可(バリデーション詳細)
429レート制限超過
500サーバー内部エラー

冪等性

  • PUT/DELETE は常に冪等に設計する
  • 決済・注文など副作用のあるPOSTIdempotency-Key ヘッダを受け付ける
  • 同一キーでの再送には同一レスポンスを返す

バージョニングと後方互換

  • URLプレフィックス方式を推奨: /v1/, /v2/
  • 互換を壊さない変更(フィールド追加・任意パラメータ追加)→バージョン不要
  • 破壊的変更(フィールド削除・型変更・必須化)→新バージョン作成+最低6ヶ月の移行期間を設ける

認証・レート制限

  • Authorization: Bearer <token> またはAPIキーをヘッダで受け取る
  • レート制限超過時: 429 Too Many Requests + Retry-After: 60 ヘッダを返す
  • 詳細は [[security]] と連携する

成果物テンプレート

エンドポイント一覧

メソッドパス概要認証主なパラメータレスポンス
GET/v1/usersユーザー一覧取得offset, limit, sort200
POST/v1/usersユーザー作成body: name, email201
GET/v1/users/{id}ユーザー詳細取得-200 / 404
PATCH/v1/users/{id}ユーザー部分更新body: (変更フィールド)200 / 404
DELETE/v1/users/{id}ユーザー削除-204 / 404
GET/v1/users/{id}/orders注文一覧cursor, limit200

エラーレスポンス形式

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "リクエストの内容が正しくありません。",
    "details": [
      {
        "field": "email",
        "code": "INVALID_FORMAT",
        "message": "メールアドレスの形式が正しくありません。"
      },
      {
        "field": "name",
        "code": "REQUIRED",
        "message": "名前は必須です。"
      }
    ]
  }
}
{
  "error": {
    "code": "NOT_FOUND",
    "message": "指定されたリソースが見つかりません。",
    "details": []
  }
}

ページネーションレスポンス形式

{
  "data": [...],
  "meta": {
    "total": 100,
    "offset": 0,
    "limit": 20
  }
}

チェックリスト

  • URLに動詞が含まれていない
  • リソース名が複数形の名詞になっている
  • ネストが1階層以内に収まっている
  • 命名規則(snake_case/camelCase)が全体で統一されている
  • ページネーション方式が全一覧エンドポイントで統一されている
  • エラーレスポンス形式が全エンドポイントで統一されている
  • 400系と500系のステータスが正しく使い分けられている
  • バリデーションエラーがフィールド単位で返せる
  • PUT/DELETEが冪等に設計されている
  • 副作用のあるPOSTにIdempotency-Key対応が検討されている
  • 日時がISO 8601(UTC)になっている
  • 破壊的変更がある場合にバージョンが上がっている
  • OpenAPI定義ファイルが存在する
  • 認証方式とレート制限の仕様が明記されている

アンチパターン

  • 動詞だらけのURL: /getUser, /createOrder, /doPayment → 操作はHTTPメソッドで表現する
  • すべて200でエラー表現: レスポンスボディ内のsuccess: falseフラグでエラーを返す → HTTPステータスを正しく使う
  • 破壊的変更の無告知投入: 本番中のAPIからフィールドを削除・型変更する → バージョニングと移行期間を設ける
  • エンドポイントごとに違うレスポンス形式: あるエンドポイントは{result: ...}、別は{data: ...} → エンベロープを統一する
  • ページネーションなしで全件返す: 件数が増えるとタイムアウト・メモリ枯渇の原因になる
  • 深すぎるネスト: /a/{id}/b/{id}/c/{id} → フラット化またはクエリパラメータで表現する
  • 浮動小数点で金額を扱う: "amount": 19.80 → 文字列か最小単位整数にする

モデル委譲ガイド

共通原則は [[orchestration]] を参照。 スキーマファーストでOpenAPI定義を先に固定すると、API実装(サーバー)とクライアント実装(SDKや型定義)を並列エージェントに委譲できる。

役割担当
司令塔(メインモデル)リソース設計の意思決定、エンドポイント一覧作成、OpenAPI定義のレビューと承認、並列実装の調整
Opus相当複雑なドメインのリソースモデリング、破壊的変更の影響範囲分析、セキュリティ設計の検討
Sonnet相当OpenAPIファイルの記述、エラー仕様の具体化、型定義・モッククライアント生成
Haiku相当ステータスコードの確認、命名規則の表記ゆれチェック、チェックリストの検証

関連スキル

  • [[orchestration]] — インターフェース先行固定と並列エージェント委譲の共通原則
  • [[requirements-definition]] — APIが満たすべき機能要件の整理
  • [[architecture-design]] — REST/GraphQL/gRPC選択の上位判断
  • [[database-design]] — リソース設計とデータモデルの整合
  • [[security]] — 認証・認可・レート制限の詳細設計
  • [[implementation]] — OpenAPI定義からのサーバー実装
  • [[testing]] — APIテスト・契約テストの設計
  • [[documentation]] — APIリファレンスドキュメントの整備

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.