開発支援・コーディング

API設計入門|半年後の自分が最初の利用者——「驚かせないAPI」の作り方

API設計で最初に決めるべきことは何かエラーレスポンスはどんな形にすべきか後から壊さないためのバージョン管理はどうするか

半年前に自分で作ったAPIを呼ぼうとして、ドキュメントもなく、エンドポイントの命名は場当たりで、エラーは謎の文字列——APIの最初の犠牲者は、たいてい未来の自分です。外部公開すれば、その体験がそのまま利用者全員に配られます。

良いAPIの条件は、天才的な設計ではありません。予測できること——つまり利用者を驚かせないことです。この記事ではGoogleが自社のAPI群のために公開している設計文書(AIP)を一次資料に、個人開発の規模で効く「驚かせない」ための約束事を4つに絞って解説します。

この記事の要点

  • 良いAPIとは利用者が推測で正解できるAPI。一貫性がドキュメントの量に勝る
  • 命名はリソース(名詞・複数形)×標準メソッドに寄せる。動詞だらけのURLは設計の匂い
  • エラーは機械向けコード+人間向けメッセージの2層で返す。文字列1本は最悪
  • 破壊的変更はバージョンを分けて出す。既存利用者の呼び出しを黙って壊さない

「驚かせない」が最上位の設計目標——Googleが文書化した理由

APIの価値は呼び出し側の学習コストの低さで決まる。一貫性は美学ではなく、ドキュメントと問い合わせを減らす実利。

API設計の参考書として最も実務的なのが、Googleが公開しているAIPです。自己定義は“a design document providing high-level, concise documentation for API development”——API開発のための簡潔な設計文書群。膨大な自社APIの一貫性を保つための社内標準を、そのまま外部に公開したものです。

なぜ巨大企業ほど「一貫性」に投資するのか

理由は単純で、APIの利用コストの大半は学習コストだからです。1つのAPIで覚えた規則が他のAPIでも通用すれば、利用者は推測で正解できます。逆に命名やエラー形式がAPIごとに違えば、その差分のぶんだけドキュメントと問い合わせが増える。個人開発でも構図は同じで、利用者第1号は半年後の自分です。

土台はリソース指向——名詞に寄せる

やりたいこと❌ 動詞だらけの設計✅ リソース指向
注文の一覧GET /getOrdersGET /orders
注文の取得GET /getOrderById?id=1GET /orders/1
注文の作成POST /createOrderPOST /orders
注文の更新POST /updateOrderPATCH /orders/1
表1 ── リソース指向の命名(AIPの設計思想を編集部が要約)
AIP stands for API Improvement Proposal, which is a design document providing high-level, concise documentation for API development.
出典Google「AIP-1: AIP Purpose and Guidelines」 一次情報を確認2026-08-14 この内容の有効期限2027-02-14

エラーとページネーション——利用者が最初に触る2つの品質

利用者はハッピーパスよりエラーとの付き合いでAPIの質を判定する。エラーの2層構造と一覧の上限は、最初の実装に含める。

API設計の品質が最も露呈するのは、正常系ではなくエラーの返し方です。呼び出し側はエラーを見て分岐を書くため、エラーの形が不安定なAPIは自動化に組み込めません

エラーは「機械向け+人間向け」の2層で

error-response.json(分岐用の安定コードと、読んで分かるメッセージを分離する)json
// ❌ これでは呼び出し側は文字列マッチで分岐するしかない
{ "error": "なんかおかしいです" }

// ✅ codeで機械が分岐し、messageで人間が理解する
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "email の形式が正しくありません"
  }
}

コードは一度公開したら変えない安定した語彙にし、メッセージは自由に改善する——この分離が2層構造の狙いです。なお内部のスタックトレースやSQL断片をレスポンスに含めるのはセキュリティ上の情報漏えいなので、本番では返しません。

一覧APIには最初から上限を

「全件返す一覧API」は、データが増えた日に時限爆弾になります。一覧系には1ページの件数上限と、次ページの取得手段を最初から入れます。limitに上限を設けるのは、呼び出しミスや悪意ある大量取得からDBを守るレート制限と同種の防御でもあります(API連携の記事の上限の話の、提供者側の視点です)。

この節は一次情報での裏取りが未了です。 編集部の整理(AIP・主要API実装の共通パターン)(2026-08-14 記載)

一番の事故は「黙って壊す」——互換性という約束

フィールド追加は安全、削除・改名・型変更は破壊。破壊するときだけバージョンを上げ、旧版に猶予を与える。この2行が互換性運用のすべて。

API設計の事故で最も恨まれるのが、既存の呼び出しを黙って壊す変更です。自分しか使っていないつもりのAPIでも、自動化ワークフローや別プロジェクトの自分が呼んでいることは珍しくありません。

壊す変更・壊さない変更の仕分け

変更互換性やってよい条件
レスポンスにフィールドを足す壊さないいつでも可(呼び出し側は未知フィールド無視が原則)
新しいエンドポイントを足す壊さないいつでも可
フィールドの削除・改名壊すバージョンを分けて。旧版に移行期間を置く
型・意味の変更壊す同上。「同じ名前で意味が変わる」が最悪
必須パラメータの追加壊す省略時デフォルトを与えれば互換にできる
表2 ── 互換性の観点での変更の分類(編集部整理)

個人開発のバージョン運用は「/v1/と猶予」だけでいい

凝ったバージョン戦略は不要です。URLに/v1/を入れておき、破壊的変更が必要になったら/v2/を並行稼働させ、旧版は告知して一定期間後に閉じる——これだけです。大事なのは仕組みより「壊すときは必ず新しい番号で」という約束を自分に課すこと。約束が守られているAPIは、外部公開したときそのまま商品品質になります。

この節は一次情報での裏取りが未了です。 編集部の整理(互換性運用の定石)(2026-08-14 記載)

よくある質問

個人開発の内部APIにも設計は必要ですか?
必要です。最初の利用者は半年後の自分で、その時の自分は他人と同じくらい仕様を忘れています。一貫した命名とエラー形式は、ドキュメントを書く余裕がない個人開発ほど効きます。
RESTとGraphQLとgRPC、どれにすべきですか?
迷ったらRESTです。ツール・事例・学習資料の裾野が最も広く、この記事の原則はそのまま適用できます。画面ごとに必要データが大きく違うならGraphQL、サービス間の高速通信ならgRPCが候補になりますが、必要になってからで間に合います。
エラーメッセージには何を書くべきですか?
機械が分岐に使う安定したコード(例: INVALID_ARGUMENT)と、人間が読んで次の行動が分かるメッセージの2つです。内部のスタックトレースやSQL断片を返すのはセキュリティ事故のもとなので、開発環境以外では出しません。
バージョンはURLに入れるべきですか?
個人開発の規模ならURLに/v1/を入れる方式が最も分かりやすく事故が少ない選択です。大事なのは方式の選択より「破壊的変更のときだけ番号を上げ、旧版をすぐ消さない」という運用の約束です。

まとめ

  • API設計の目標は予測可能性。利用者(未来の自分を含む)を驚かせない
  • 命名はリソース指向に寄せる。標準から外れる箇所こそドキュメントを書く
  • エラーは2層構造で。分岐用コードと人間向け説明を分ける
  • 変更は互換か破壊かを常に自問する。破壊するならバージョンを分ける

今日から始められること

  1. 自分のAPIのエンドポイント一覧を書き出し、命名の不揃いを探す
  2. エラーレスポンスを「コード+メッセージ」の統一形式に揃える
  3. レスポンスに内部情報(スタックトレース・SQL)が漏れていないか確認する
  4. 一覧系APIに件数上限とページネーションを入れる

実務で組んだAPI設計のワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る