API デザイン パターン
一貫性のある開発者フレンドリーな REST API を設計するための規約とベスト プラクティス。
アクティブ化するとき
- 新しい API エンドポイントを設計しているとき
- 既存の API 契約をレビューしているとき
- ページネーション、フィルタリング、またはソートを追加しているとき
- API のエラー処理を実装しているとき
- API バージョン管理戦略を計画しているとき
- パブリックまたはパートナー向けの API を構築しているとき
リソース デザイン
URL 構造
命名規則
HTTP メソッドとステータス コード
メソッド セマンティクス
*PATCH は適切な実装でべき等にすることができます
ステータス コード リファレンス
一般的な間違い
応答フォーマット
成功応答
コレクション応答(ページネーション付き)
エラー応答
応答エンベロープ バリエーション
ページネーション
オフセット ベース(シンプル)
長所: 実装が簡単、「N ページにジャンプ」をサポート 短所: 大きなオフセット(OFFSET 100000)で低速、同時挿入で矛盾
カーソル ベース(スケーラブル)
長所: 位置に関わらず一貫性のあるパフォーマンス、同時挿入では安定 短所: 任意のページへのジャンプができない、カーソルが不透明
どちらを使用するか
フィルタリング、ソート、検索
フィルタリング
ソート
全文検索
スパース フィールドセット
認証と認可
トークン ベース認証
認可パターン
レート制限
ヘッダー
レート制限ティア
バージョン管理
URL パス バージョン管理(推奨)
長所: 明示的、ルーティングが簡単、キャッシャブル 短所: バージョン間で URL が変更される
ヘッダー バージョン管理
長所: クリーンな URL 短所: テストが困難、忘れやすい
バージョン管理戦略
実装パターン
TypeScript (Next.js API ルート)
API デザイン チェックリスト
新しいエンドポイントを本番環境に配信する前に:
- リソース URL は命名規則に従う(複数形、ケバブケース、動詞なし)
- 正しい HTTP メソッドが使用されている(読み取り用 GET、作成用 POST など)
- 適切なステータス コードが返される(すべてに 200 ではない)
- 入力がスキーマで検証される(Zod、Pydantic、Bean Validation)
- エラー応答は標準フォーマットに従う(コードとメッセージ付き)
- ページネーションはリスト エンドポイントに実装される(カーソルまたはオフセット)
- 認証が必要(または明示的にパブリックとしてマーク)
- 認可が確認される(ユーザーは自分のリソースにのみアクセス可能)
- レート制限が設定される
- 応答は内部詳細をリークしない(スタック トレース、SQL エラー)
- 既存のエンドポイントと命名が一貫している(camelCase vs snake_case)
- ドキュメント化される(OpenAPI/Swagger スペック更新)


