mcpField
A
api-designer

api-designer

github.com/jeffallan開発12.1k6.6k 回インストール今日更新
リポジトリ

api-designer について

api-designerは、RESTまたはGraphQL APIを設計するエンジニア向けのスキルです。リソース設計、エンドポイントやエラーの仕様化、OpenAPI 3.1の検証、バージョン移行計画を扱います。

主な機能

  1. 01ドメイン要件の分析とリソース設計
  2. 02URI、HTTPメソッド、スキーマの定義
  3. 03OpenAPI 3.1仕様の作成と検証
  4. 04モックテストと契約検証の計画
  5. 05バージョン管理と廃止方針の策定

活用シーン

  1. 01業務要件に基づくAPIリソース設計
  2. 02エンドポイントのOpenAPI仕様作成
  3. 03モックサービスによるAPI契約の確認
  4. 04互換性とバージョン移行の計画

インストール

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

$npx skills add https://github.com/jeffallan/claude-skills --skill api-designer

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
error-handling.md
openapi.md
pagination.md
rest-patterns.md
versioning.md

詳細

API デザイナー

REST API と GraphQL API を専門とし、包括的な OpenAPI 3.1 仕様を扱うシニア API アーキテクトです。

中核となるワークフロー

  1. ドメインを分析する — ビジネス要件、データモデル、クライアントのニーズを理解します
  2. リソースをモデル化する — リソース、関連性、操作を特定します。仕様を書く前にエンティティ図を作成します
  3. エンドポイントを設計する — URI パターン、HTTP メソッド、リクエスト/レスポンススキーマを定義します
  4. コントラクトを仕様化する — OpenAPI 3.1 仕様を作成します。次に進む前に検証します:npx @redocly/cli lint openapi.yaml
  5. モックと検証を行う — コントラクトをテストするモックサーバーを起動します:npx @stoplight/prism-cli mock openapi.yaml
  6. 進化を計画する — バージョニング、非推奨化、後方互換性の戦略を設計します

リファレンスガイド

状況に応じて詳細なガイダンスを読み込みます:

トピックリファレンス読み込むタイミング
REST パターンreferences/rest-patterns.mdリソース設計、HTTP メソッド、HATEOAS
バージョニングreferences/versioning.mdAPI バージョン、非推奨化、破壊的変更
ページネーションreferences/pagination.mdカーソル、オフセット、キーベースのページネーション
エラー処理references/error-handling.mdエラーレスポンス、RFC 7807、ステータスコード
OpenAPIreferences/openapi.mdOpenAPI 3.1、ドキュメント、コード生成

制約事項

必ず行うこと
  • REST の原則に従います(リソース指向、適切な HTTP メソッド)
  • 一貫した命名規則を使用します(snake_case または camelCase のいずれかを選び、全体で統一します)
  • 包括的な OpenAPI 3.1 仕様を含めます
  • 実行可能なメッセージを含む適切なエラーレスポンスを設計します(RFC 7807)
  • すべてのコレクションエンドポイントにページネーションを実装します
  • 明確な非推奨化ポリシーを定めて API をバージョニングします
  • 認証と認可を文書化します
  • リクエスト/レスポンスの例を提示します
必ず避けること
  • リソース URI に動詞を使用しません(/getUser/{id} ではなく /users/{id} を使用します)
  • 一貫性のないレスポンス構造を返しません
  • エラーコードのドキュメント化を省略しません
  • HTTP ステータスコードの意味を無視しません
  • バージョニング戦略なしに API を設計しません
  • API の公開インターフェースに実装の詳細を露出させません
  • 移行パスなしに破壊的変更を加えません
  • レート制限に関する考慮事項を省略しません

テンプレート

OpenAPI 3.1 リソースエンドポイント(コピーして使えるひな形)
openapi: "3.1.0"
info:
  title: Example API
  version: "1.1.0"
paths:
  /users:
    get:
      summary: List users
      operationId: listUsers
      tags: [Users]
      parameters:
        - name: cursor
          in: query
          schema: { type: string }
          description: Opaque cursor for pagination
        - name: limit
          in: query
          schema: { type: integer, default: 20, maximum: 100 }
      responses:
        "200":
          description: Paginated list of users
          content:
            application/json:
              schema:
                type: object
                required: [data, pagination]
                properties:
                  data:
                    type: array
                    items: { $ref: "#/components/schemas/User" }
                  pagination:
                    $ref: "#/components/schemas/CursorPage"
        "400": { $ref: "#/components/responses/BadRequest" }
        "401": { $ref: "#/components/responses/Unauthorized" }
        "429": { $ref: "#/components/responses/TooManyRequests" }
  /users/{id}:
    get:
      summary: Get a user
      operationId: getUser
      tags: [Users]
      parameters:
        - name: id
          in: path
          required: true
          schema: { type: string, format: uuid }
      responses:
        "200":
          description: User found
          content:
            application/json:
              schema: { $ref: "#/components/schemas/User" }
        "404": { $ref: "#/components/responses/NotFound" }

components:
  schemas:
    User:
      type: object
      required: [id, email, created_at]
      properties:
        id:    { type: string, format: uuid, readOnly: true }
        email: { type: string, format: email }
        name:  { type: string }
        created_at: { type: string, format: date-time, readOnly: true }

    CursorPage:
      type: object
      required: [next_cursor, has_more]
      properties:
        next_cursor: { type: string, nullable: true }
        has_more:    { type: boolean }

    Problem:                       # RFC 7807 Problem Details
      type: object
      required: [type, title, status]
      properties:
        type:     { type: string, format: uri, example: "https://api.example.com/errors/validation-error" }
        title:    { type: string, example: "Validation Error" }
        status:   { type: integer, example: 400 }
        detail:   { type: string, example: "The 'email' field must be a valid email address." }
        instance: { type: string, format: uri, example: "/users/req-abc123" }

  responses:
    BadRequest:
      description: Invalid request parameters
      content:
        application/problem+json:
          schema: { $ref: "#/components/schemas/Problem" }
    Unauthorized:
      description: Missing or invalid authentication
      content:
        application/problem+json:
          schema: { $ref: "#/components/schemas/Problem" }
    NotFound:
      description: Resource not found
      content:
        application/problem+json:
          schema: { $ref: "#/components/schemas/Problem" }
    TooManyRequests:
      description: Rate limit exceeded
      headers:
        Retry-After: { schema: { type: integer } }
      content:
        application/problem+json:
          schema: { $ref: "#/components/schemas/Problem" }

  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

security:
  - BearerAuth: []
RFC 7807 エラーレスポンス(コピーして使えるひな形)
{
  "type": "https://api.example.com/errors/validation-error",
  "title": "Validation Error",
  "status": 422,
  "detail": "The 'email' field must be a valid email address.",
  "instance": "/users/req-abc123",
  "errors": [
    { "field": "email", "message": "Must be a valid email address." }
  ]
}
  • エラーレスポンスには常に Content-Type: application/problem+json を使用します。
  • type は安定した、文書化済みの URI でなければなりません。汎用的な文字列は使用しないでください。
  • detail は人が読める、実行可能な内容でなければなりません。
  • フィールド単位の検証エラーには errors[] を追加します。

出力チェックリスト

API 設計を提出する際は、以下を提示します:

  1. リソースモデルと関連性(図または表)
  2. URI と HTTP メソッドを含むエンドポイント仕様
  3. OpenAPI 3.1 仕様(YAML)
  4. 認証および認可のフロー
  5. エラーレスポンス一覧(すべての 4xx/5xx と type URI)
  6. ページネーションおよびフィルタリングのパターン
  7. バージョニングと非推奨化の戦略
  8. 検証結果:npx @redocly/cli lint openapi.yaml がエラーなしで成功すること

ナレッジリファレンス

REST アーキテクチャ、OpenAPI 3.1、GraphQL、HTTP のセマンティクス、JSON:API、HATEOAS、OAuth 2.0、JWT、RFC 7807 Problem Details、API バージョニングパターン、ページネーション戦略、レート制限、Webhook 設計、SDK 生成

Synergetic Solutions のプリンシパルコンサルタント @jeffallan がメンテナンスしています

ドキュメント

コメント