mcpField
A
api-design

api-design

github.com/yonatangross開発299204 回インストール今日更新
リポジトリ

api-design について

api-design は、REST、GraphQL、gRPC、バージョニング、エラー処理、ストリーミング API の設計ルール集です。カテゴリごとにルールを読み込めるほか、バージョニングとエラー応答に関するプロジェクト固有の方針も含みます。

主な機能

  1. 01REST のリソース設計と OpenAPI 仕様
  2. 02URL とヘッダーによるバージョニング
  3. 03RFC 9457 に基づくエージェント向けエラー
  4. 04GraphQL と gRPC の設計ルール
  5. 05SSE と WebSocket のストリーミングパターン
  6. 06メッセージングと Payload CMS の連携パターン

活用シーン

  1. 01REST エンドポイントとリソース構造の設計
  2. 02API のバージョニングと廃止方針の策定
  3. 03エージェント向け機械可読エラーの設計
  4. 04GraphQL、gRPC、ストリーミング API の構築

インストール

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

$npx skills add https://github.com/yonatangross/orchestkit --skill api-design

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

同梱ファイル

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

metadata.json
assets/
openapi-template.yaml
asyncapi-template.yaml
examples/
fastapi-problem-details.md
orchestkit-api-design.md
references/
graphql-api.md
ork-delta.md
payload-vs-sanity.md
rest-patterns.md
whatsapp-waha.md
webhook-security.md
telegram-bot-api.md
rules/
_template.md
_sections.md
framework-openapi.md
framework-resource-modeling.md
framework-rest-conventions.md
graphql-strawberry.md
errors-agent-facing.md
grpc-service.md
grpc-streaming.md
graphql-schema.md
payload-cms.md
streaming-sse.md
messaging-integrations.md
versioning-header.md
versioning-url-path.md
streaming-websocket.md
scripts/
create-openapi-spec.md
fastapi-versioned-router.py

詳細

API 設計

REST/GraphQL のフレームワーク設計、バージョニング戦略、RFC 9457 によるエラーハンドリングを網羅した API 設計パターンです。各カテゴリには個別のルールファイルがあり、必要に応じて rules/ から読み込まれます。

クイックリファレンス

カテゴリルール影響度使用する場面
API フレームワーク3HIGHREST の規約、リソースのモデル化、OpenAPI 仕様
バージョニング2HIGHURL パスによるバージョニング、ヘッダーによるバージョニング。廃止までの期間は references/ork-delta.md にあるプロジェクト内ポリシーです
エラーハンドリング1HIGHエージェント向け RFC 9457 拡張。基本仕様と FastAPI の接続方法は上流資料を参照してください
GraphQL2HIGHStrawberry によるコードファースト設計、DataLoader、権限、サブスクリプション
gRPC2HIGHProtobuf サービス、ストリーミング、インターセプター、再試行
ストリーミング2HIGHSSE エンドポイント、双方向 WebSocket、非同期ジェネレーター
インテグレーション2HIGHメッセージングプラットフォーム(WhatsApp、Telegram)、Payload CMS のパターン

合計:7 カテゴリにわたる 14 個のルールです。 削られたファイルから救済されたプロジェクト内の決定事項は references/ork-delta.md にあります。ベンダー資料と仕様は再掲せず、リンクしています(上流資料の対象範囲を参照)。

API フレームワーク

一貫性があり、開発者にとって使いやすい API を実現するための REST および GraphQL API 設計規約です。

ルールファイル主なパターン
REST の規約rules/framework-rest-conventions.md複数形の名詞、HTTP メソッド、ステータスコード、ページネーション
リソースのモデル化rules/framework-resource-modeling.md階層型 URL、フィルタリング、ソート、フィールド選択
OpenAPIrules/framework-openapi.mdOpenAPI 3.1 仕様、ドキュメント、スキーマ定義

バージョニング

クライアントに互換性を損なう変更を加えずに API を進化させるための戦略です。

ルールファイル主なパターン
URL パスrules/versioning-url-path.md/api/v1/ プレフィックスによるルーティング、バージョン別スキーマ
ヘッダーrules/versioning-header.mdX-API-Version ヘッダー、コンテンツネゴシエーション

廃止と提供終了については、プロジェクト内の期間(3 か月前の通知、6 か月後に提供終了、現行バージョンと次の 1 バージョンをサポート)を references/ork-delta.md に記載しています。ヘッダーの仕組みについては上流資料を参照してください(RFC 8594、RFC 9745)。

エラーハンドリング

機械可読で標準化されたエラーレスポンスのための RFC 9457 Problem Details です。

ルールファイル主なパターン
エージェント向けエラーrules/errors-agent-facing.mdエージェント向け拡張:retryable、error_category、コンテンツネゴシエーション、トークン効率

RFC 9457 の基本形式、FastAPI の例外ハンドラーの接続方法、Pydantic の 422 マッピングについては上流資料を参照してください(上流資料の対象範囲を参照)。ここではプロジェクト固有の内容として、Problem Details のタイプ URI 規約と型付き例外の用語を references/ork-delta.md に、完全に動作する実装を examples/fastapi-problem-details.md に記載しています。

GraphQL

型安全なリゾルバーと FastAPI 統合を備えた、Strawberry GraphQL のコードファーストスキーマです。

ルールファイル主なパターン
スキーマ設計rules/graphql-strawberry.md型安全なスキーマ、DataLoader、共用体エラー、Private フィールド
パターンと認証rules/graphql-schema.md権限クラス、FastAPI 統合、サブスクリプション

gRPC

内部マイクロサービス間通信に適した、高性能な gRPC です。

ルールファイル主なパターン
サービス定義rules/grpc-service.mdProtobuf、非同期サーバー、クライアントのタイムアウト、コード生成
ストリーミングとインターセプターrules/grpc-streaming.mdサーバー/双方向ストリーミング、認証、再試行のバックオフ

ストリーミング

SSE、WebSocket、および適切なクリーンアップによるリアルタイムデータのストリーミングです。

ルールファイル主なパターン
SSErules/streaming-sse.mdSSE エンドポイント、LLM ストリーミング、再接続、キープアライブ
WebSocketrules/streaming-websocket.md双方向通信、ハートビート、aclosing()、バックプレッシャー

インテグレーション

メッセージングプラットフォームとのインテグレーションと、ヘッドレス CMS のパターンです。

ルールファイル主なパターン
メッセージングプラットフォームrules/messaging-integrations.mdWhatsApp WAHA、Telegram Bot API、Webhook のセキュリティ
Payload CMSrules/payload-cms.mdPayload 3.0 のコレクション、アクセス制御、CMS の選定

クイックスタートの例

# REST endpoint with versioning and RFC 9457 errors
from fastapi import APIRouter, Depends, Request
from fastapi.responses import JSONResponse

router = APIRouter()

@router.get("/api/v1/users/{user_id}")
async def get_user(user_id: str, service: UserService = Depends()):
    user = await service.get_user(user_id)
    if not user:
        raise NotFoundProblem(
            resource="User",
            resource_id=user_id,
        )
    return UserResponseV1(id=user.id, name=user.full_name)

主な決定事項

決定事項推奨事項
バージョニング戦略公開 API には URL パス(/api/v1/)を使用します
リソースの命名複数形の名詞と kebab-case を使用します
ページネーション大規模なデータセットにはカーソルベースを使用します
エラー形式application/problem+json を使用する RFC 9457 Problem Details
エラータイプ URI独自の API ドメインに /problems/ プレフィックスを付けます
サポート期間現行バージョンとその 1 つ前のバージョン
非推奨の告知サポート終了の最低 3 か月前
サポート終了までの期間非推奨化から 6 か月後
GraphQL スキーマStrawberry の型を使ったコードファースト
N+1 の防止すべてのネストしたリゾルバーで DataLoader を使用します
GraphQL の認証権限クラス(コンテキストベース)
gRPC protoファイルごとに 1 つのサービスを定義し、common.proto を共有します
gRPC ストリーミングリストにはサーバーストリーム、リアルタイム通信には双方向ストリームを使用します
SSE のキープアライブ30 秒ごと
WebSocket のハートビート30 秒ごとに ping-pong を行います
非同期ジェネレーターのクリーンアップすべての外部リソースに aclosing() を使用します

よくある間違い

  1. URL に動詞を含める(POST /users ではなく POST /createUser)
  2. エンドポイント間でエラー形式に一貫性がない
  3. バージョンを上げずにコントラクトを変更する
  4. Problem Details ではなくプレーンテキストでエラーを返す
  5. 非推奨化ヘッダーなしでバージョンをサポート終了にする
  6. エラーに内部の詳細(スタックトレース、DB エラー)を公開する
  7. エラーレスポンスに Content-Type: application/problem+json がない
  8. 同時にサポートする API バージョンが多すぎる(最大 2~3)
  9. バージョン間の分離を考慮せずにキャッシュする

上流のカバレッジ(再記述しないこと)

2026-07-31 の wrap-plus-delta による削減で削除されたトピックです。一次情報を参照してください。このスキルに含めるのは ork 差分(社内ポリシー、教訓、実運用設定)のみです。

トピック一次情報
RFC 9457 Problem Details の仕様(メンバー、メディアタイプ、about:blank、クライアント側のパース)https://www.rfc-editor.org/rfc/rfc9457.html
FastAPI の例外ハンドラー、Pydantic の検証エラー(422)、エラーカタログの定型コードhttps://fastapi.tiangolo.com/tutorial/handling-errors/
API のバージョニング戦略のチュートリアルと FastAPI のバージョン別ルーター解説https://fastapi.tiangolo.com/tutorial/bigger-applications/
Deprecation ヘッダーと Sunset ヘッダーの仕組みhttps://www.rfc-editor.org/rfc/rfc8594.html および https://www.rfc-editor.org/rfc/rfc9745.html
汎用 REST リファレンス(メソッド、ステータスコード、ページネーション形式、認証ヘッダー)https://www.rfc-editor.org/rfc/rfc9110.html および https://developer.mozilla.org/en-US/docs/Web/HTTP
OpenAPI 3.1 仕様の作成(テンプレートは assets/openapi-template.yaml に残っています)https://spec.openapis.org/oas/v3.1.0
gRPC proto のスタイル、サービス定義、ステータスコードhttps://grpc.io/docs/ および https://protobuf.dev/programming-guides/style/
Payload CMS のコレクション設計、フィールド型、アクセス制御https://payloadcms.com/docs
フロントエンドでの API 利用(Zod による境界検証、ky、TanStack Query)https://zod.dev および https://tanstack.com/query/latest/docs
API 設計/エラー処理/バージョニングのレビューチェックリスト上記の仕様から導出できます。チェックリストの再記述は含めていません

評価

すべてのカテゴリにわたる 13 件のテストケースについては、test-cases.json を参照してください。

関連スキル

  • fastapi-advanced - FastAPI 固有の実装パターン
  • rate-limiting - 高度なレート制限の実装とアルゴリズム
  • observability-monitoring - バージョン使用状況のメトリクスとエラートラッキング
  • input-validation - API エラー処理以外のバリデーションパターン
  • streaming-api-patterns - リアルタイム API 向けの SSE と WebSocket のパターン

機能の詳細

rest-design

キーワード: rest、restful、http、endpoint、route、path、resource、CRUD 解決する課題:

  • RESTful API はどのように設計すればよいですか?
  • REST エンドポイントのパターンと規約
  • HTTP メソッドとステータスコード
graphql-design

キーワード: graphql、schema、query、mutation、connection、relay 解決する課題:

  • GraphQL API はどのように設計すればよいですか?
  • スキーマ設計のベストプラクティス
  • ページネーション向けの Connection パターン
endpoint-design

キーワード: endpoint、route、path、resource、CRUD、openapi 解決する課題:

  • API エンドポイントはどのように構成すればよいですか?
  • このリソースにはどの URL パターンが最適ですか?
  • RESTful エンドポイントの命名規約
url-versioning

キーワード: url version、path version、/v1/、/v2/ 解決する課題:

  • REST API はどのようにバージョン管理すればよいですか?
  • URL ベースの API バージョン管理
header-versioning

キーワード: header version、X-API-Version、content negotiation 解決する課題:

  • URL をすっきりさせるバージョン管理
  • ヘッダーベースの API バージョン管理
deprecation

キーワード: deprecation、sunset、version lifecycle、backward compatible 解決する課題:

  • API バージョンはどのように廃止すればよいですか?
  • バージョンのサポート終了ポリシー
  • 破壊的変更と非破壊的変更
problem-details

キーワード: problem details、RFC 9457、RFC 7807、structured error、application/problem+json 解決する課題:

  • API のエラーレスポンスを標準化するにはどうすればよいですか?
  • API エラーにはどの形式を使えばよいですか?
agent-facing-errors

キーワード: agent error、AI agent、retryable、retry_after、error_category、content negotiation、accept header、token efficient、machine readable 解決する課題:

  • AI エージェントの利用者向けエラーレスポンスはどのように設計すればよいですか?
  • エラーレスポンスのトークンコストを削減するにはどうすればよいですか?
  • エラーをエージェントが確定的に処理できるようにするにはどうすればよいですか?
  • エージェント、ブラウザー、LLM 向けのコンテントネゴシエーション
validation-errors

キーワード: validation、field error、422、unprocessable、pydantic 解決する課題:

  • API のバリデーションエラーはどのように処理すればよいですか?
  • フィールド単位のエラーレスポンス
error-registry

キーワード: error registry、problem types、error catalog、error codes 解決する課題:

  • すべての API エラーをどのように文書化すればよいですか?
  • エラータイプの管理

コメント