RESTを使っているのに、RESTが何かを正確に説明できない。そんな違和感が積み重なっていくと、自信のあるはずの設計にもどこか迷いが残る。RESTは使うものではなく、理解してこそ意味を持つ。その本質をつかむための記事。
Contents
RESTの設計思想はHTTPの背後にある
REST(Representational State Transfer)は、単なるAPIのルールではない。HTTPを含むWeb全体の設計思想を定義したアーキテクチャスタイルである。
2000年、Roy Fieldingが博士論文の中でこの概念を提唱した。彼はHTTP/1.1の共同設計者でもある。RESTは、分散システムがスケーラブルかつ一貫性のある構造を保てるように、クライアントとサーバーのやりとりの仕組みを形式化したものである。
Fieldingの言葉を借りるなら、「RESTはWebというシステムの成功に不可欠な原則を定義したもの」である。つまりRESTは、後からAPIの設計に取り入れられたのではなく、最初からWebの根底にあった設計論理に他ならない。
RESTの設計原則を正確に理解する
RESTには明確な設計原則が6つある。これらはAPIの仕様というより、分散システム全体をどう設計するかのルールとして機能している。
- クライアント・サーバーの分離
システムの構成要素を明確に分けることで、独立して進化できる。 - ステートレス性
リクエストごとに完全な情報を含めることで、サーバーが状態を保持しない。 - キャッシュ可能性
レスポンスは再利用可能に設計されることで、ネットワーク負荷を軽減する。 - 統一インターフェース
あらゆるリソース操作が共通のインターフェースで実現される。 - 階層化システム
サーバーを階層的に構築し、中継やゲートウェイの設計を可能にする。 - コードオンデマンド(任意)
クライアントにスクリプトを送ることで、一時的な拡張を可能にする。
特に重要なのは統一インターフェースの部分。これにより、あらゆる操作をGET、POST、PUT、DELETEなどのHTTPメソッドで一貫して行える。RESTful APIが「HTTPメソッドで操作する形式」を採用するのは、この原則に由来する。
RESTの中核は「リソース」と「表現」
RESTの最も重要な構造要素はリソースとその表現(Representation)である。URIで表されるものはすべてリソースとみなされる。たとえば /users/123
というURIは、IDが123のユーザーという「リソース」を指す。
ここで重要なのは、クライアントが受け取るのはリソースそのものではなく、その「状態を表したもの」であること。これを表現(Representation)と呼ぶ。
この関係を理解するために、宅配ピザに例える。
- リソース:ピザの注文そのもの
- URI:注文番号やチラシに書かれたコード
- Representation:届いたピザ(大きさ、トッピング、箱の形)
- HTTPメソッド:注文(POST)、確認(GET)、変更(PUT)、キャンセル(DELETE)
ピザを頼むたびに違う容器で届いても中身が同じならOK。RESTでも同じリソースに対して、JSONやXMLなど異なる表現形式が使える。中身が同じでも見せ方を変えられる。これがRESTの柔軟性につながる。
RESTful APIはRESTの応用形でしかない
RESTful APIはRESTの原則をHTTPにのせて実装した具体例にすぎない。つまりRESTそのものではなく、RESTという設計哲学に基づいた1つの表現形式である。
たとえば、GET /users/123
はRESTfulなエンドポイントだが、/getUser?id=123
のようなRPC的なAPIはREST的とは言えない。リソース中心ではなく、操作名が前に出ている設計だからである。
この違いは単なる書き方の話ではない。RESTは操作ではなく対象(リソース)に重心を置く考え方を前提としている。その視点が欠けると、設計全体が一貫性を失う。
RESTの設計思想はAPI以外にも活きている
RESTはAPI専用の設計スタイルではない。Webページ、IoT通信、分散システム、キャッシュ制御、URI設計など、あらゆるWebアーキテクチャに応用されている。
Google Cloudの設計ドキュメントでは、「REST原則は、あらゆる規模のクラウドサービスで再利用可能な構造を提供する」と明記されている。たとえばFirebaseやCloud StorageといったGoogleのクラウドAPIもREST設計を踏襲している。
RESTの「リソースをURIで識別し、表現をHTTPで返す」思想は、IoTデバイスの状態管理やCDNのキャッシュ設計にも活用されている。RESTはHTTPベースの設計を越えて、Webの根幹に近い位置で機能している。
まとめ
RESTはHTTPで操作するAPI仕様ではない。Web全体をどう設計するかを定めた設計思想である。その中核には、リソースを抽象化し、表現によってやりとりするという概念がある。
RESTful APIはその思想をAPIとして実装したものでしかない。RESTを語れるということは、URIやHTTPメソッドだけでなく、「なぜそう設計するのか」という背後にある意図まで理解している状態である。
理解の深さが、設計の一貫性を生み、迷いのないシステムへつながっていく。RESTを語れるということは、Webを設計できるということでもある。