SDN
← 概念一覧へ
通信プロトコル

REST

REST

リソース(データ)を中心に据え、HTTPの標準的な仕組みでやり取りするアーキテクチャスタイル。ステートレスで疎結合なので、公開APIや水平スケールに向く。

キーポイント
  • クライアント/サーバーモデルを徹底。サーバーがリソースの表現と操作を提供する。すべての通信はステートレスかつキャッシュ可能。
  • 4つの性質: ①URIでリソースを識別 ②HTTP verbで操作 ③ステータスコードで自己記述的なエラー ④HATEOAS(レスポンスに次の操作リンクを含める)。
  • 『データ(リソース)』の公開に焦点。結合を最小化し、public HTTP APIで一般的。
  • ステートレスなので水平スケール/パーティショニングに向く。
  • 短所: 単純な階層でないリソースは扱いづらい。限られたverbが用途に合わないことがある。ネストの取得に複数往復(モバイルで不利)。時間とともにフィールドが増えpayloadが肥大化。
トレードオフ

RESTはステートレスで疎結合、HTTPの標準に乗るのでキャッシュやツールの恩恵を最大限受けられ、公開APIに最適。一方、データが単純なリソース階層に収まらない場合や、限られたHTTP動詞では表現しづらい操作があると窮屈。関連データをまとめて取るのに複数リクエストが要り、モバイルなど往復が高コストな環境で不利になりうる(そこはGraphQLやRPCで補うことも)。

RPCとの思想の違い: 振る舞い vs データ

ここが一番の勘所です。

  • RPC = 『操作(振る舞い)』を公開する。createUserdeleteUser のように動詞中心。
  • REST = 『リソース(データ)』を公開する。/users という名詞に対し、HTTPの動詞(GET/POST/DELETE)で操作する。
図を描画中...

RESTでは『1つのリソース(/users)に対し、標準のHTTP動詞で操作する』という統一感があります。新しい操作のために新APIを作る必要が減ります。

RESTの4つの柱

  1. URIでリソースを識別: /users/123 がユーザー123を一意に指す。
  2. HTTP verbで操作: GET(取得)、POST(作成)、PUT(更新)、DELETE(削除)。
  3. 自己記述的なエラー: ステータスコード(200成功、404なし、500エラー)で結果を伝える。
  4. HATEOAS: レスポンスに『次にできる操作』へのリンクを含め、クライアントを誘導する。

ステートレスの威力

RESTの各リクエストは自己完結しています。サーバーは前のリクエストの状態を覚えていません(ステートレス)。

これが水平スケールに効きます。状態を持たないので、どのサーバーにリクエストが振られても同じように処理できる。ロードバランサーで台数を自由に増やせます(『ロードバランサー』の章のステートレスの話と直結)。

図を描画中...

RPC vs REST 早見表

操作RPCの例RESTの例
登録POST /signupPOST /persons
退会POST /resign {personid}DELETE /persons/1234
取得GET /readPerson?personid=1234GET /persons/1234

つまずきポイント(短所)

  • 単純なリソース階層に収まらないデータ(複雑な操作)は表現しづらい。
  • 関連データをまとめて取りたいとき、複数回リクエストが要る(例: ユーザー→その投稿→各投稿のコメント)。モバイルなど往復コストが高い環境で不利。GraphQLはこの不満から生まれた。
  • フィールドが増えるとレスポンスが肥大化しやすい。

使い分けの結論

  • 外部公開・汎用・疎結合 → REST(public HTTP API)。
  • 内部・性能重視・密結合OK → RPC。

関連する概念

この概念で腕試し

関連する 6 問のクイズに挑戦できます。

クイズを解く