🧩

REST API設計であとから効いてくる判断ポイント

に公開
2026/01/05

はじめに

Web アプリケーションのバックエンド開発を中心に仕事をしています。
Java / Spring Boot、Python / FastAPI などを使って REST API の設計・実装をしてきました。

これまでの開発では、中規模 SaaS のバックエンド設計を一人で担当し、API62 本を設計・実装した経験があります。

この記事では、
REST API を設計するときに「なぜその形にしたのか」を説明できるようになるための判断ポイント
をまとめます。

「正解集」ではなく、
あとから変更・拡張するときに効いてくる考え方を中心に書いていきます。

REST API 設計で“なんとなく”になりがちなポイント

REST API は、動くものを作るだけであれば比較的簡単です。
その一方で、次のような状態になりがちです。

  • URL や HTTP メソッドを雰囲気で決めている
  • とりあえず 200 でレスポンスを返している
  • エラー設計は後回しになっている
  • フロントからの要求にその場しのぎで対応している

最初は問題なく動いていても、
API の数が増えたり、仕様変更が入ったタイミングで一気に辛くなることが多いです。

設計で最初に決めている 3 つのこと

REST API を設計するとき、私はまず次の 3 点を意識しています。

1. リソースの単位は何か

この API で扱っている「主語」は何かを最初に決めます。

  • user
  • order
  • product

など、名詞で表現できる単位を明確にします。

2. 責務の境界はどこか

この API がやること/やらないことを決めます。

  • データ取得だけか
  • 状態変更まで行うのか
  • 他のリソースに影響を与えるのか

責務が曖昧だと、API が肥大化しやすくなります。

3. 変更されやすいポイントはどこか

  • 今後、仕様変更が入りそうな部分
  • 拡張されそうな項目

ここを意識しておくと、
URL 設計やレスポンス設計の判断がしやすくなります。

URL 設計で意識していること

名詞ベースで考える

URL は基本的に 名詞(リソース) で設計します。

/users
/users/{id}
/orders

動詞を URL に含めると、
HTTP メソッドとの責務が曖昧になりやすいためです。

階層を深くしすぎない

/users/{userId}/orders/{orderId}/items

このような階層は、
「本当にここまで必要か?」を一度立ち止まって考えます。

フロントエンド(React / Next.js)から使う視点で見ると、
必要以上に複雑な URL は扱いづらいことが多いです。

HTTP ステータスとエラー設計

200 ですべてを返さない

  • 正常:200
  • 入力不正:400
  • 認証エラー:401
  • 権限不足:403
  • リソースなし:404

最低限、このあたりは明確に分けています。

エラーレスポンスを統一する

エラー時のレスポンス形式を揃えておくと、

  • フロント側の実装が楽になる
  • ログ・監視がしやすくなる

といったメリットがあります。

あとから効いてくる「非機能視点」

API 設計では、機能だけでなく非機能も重要です。

  • ログに何を出すか
  • 将来のバージョニングをどうするか
  • 監視で何を検知したいか

このあたりを少しでも意識しておくと、
運用フェーズに入ったときの負担が大きく変わります。

実際に後悔した設計と学び

SaaS のバックエンドを一人で設計した際、
最初は「とりあえず動く API」を優先していました。

結果として、

  • 責務が曖昧な API
  • フロント都合に引きずられた URL 設計

になってしまい、後から整理するのに時間がかかりました。

今振り返ると、
最初に判断軸を決めておくことの重要性を強く感じています。

おわりに

REST API 設計に絶対的な正解はありません。
ただし、「なぜその設計にしたのか」を説明できるかどうかは大きな差になります。

Discussion