RESTをわかりやすく整理してみた
REST について整理してみました。
REST とは
2000年にRoy Fielding氏が提唱した、分散システムにおいて複数のソフトウェアを連携させるのに適した設計原則の集合。また、狭義には、それをWebに適用したソフトウェアの設計様式のこと。
Web を支える技術では「アーキテクチャスタイル」と表現してありました。
アーキテクチャではなくアーキテクチャスタイルであり、一段上の概念です。
設計原則や設計様式であり、設計ではありません。
REpresentational State Transfer の略が REST であり、直訳すると「表現可能な状態の転送」となり、表現可能な状態(いわゆるリソース)の転送(やりとり)に関する設計原則であると読み取れます。
すなわち REST では「リソースの取り扱い原則」を規定しているんだと思います。
REST の設計原則
Fielding氏が示したRESTの設計原則は主として以下の4つの項目から成る。「セッションなどの状態管理を行わない(やり取りされる情報はそれ自体で完結して解釈することができる)」(Webシステムでは、HTTP自体にはセッション管理の機構はない)、「情報を操作する命令の体系が予め定義・共有されている」(WebシステムではHTTPのGETやPOSTなどに相当)、「すべての情報は汎用的な構文で一意に識別される」(URLやURIに相当)、「情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができる(ハイパーメディア的な書式で情報を表現する)」(HTMLやXMLに相当)の4つである。
REST の4つの設計原則を一言でまとめていくと以下の通りになる気がします。
- ステートレスなクライアントサーバ
- リソースへの統一インターフェース
- リソースのアドレス可能性
- リソースのハイパーメディア性
こうして見ると、Web って本当に RESTful ですね。
RESTful
REST の設計原則に従うシステムは RESTful と呼ばれます。
RESTful API や REST API といった場合には、REST の原則に従った API といった意味になります。 Web API を指して RESTful といった場合、Web の設計に従った API*1 になるかと思います。
RESTful な Web サービス
ここでいう Web サービスは Web API を含んだ広義の Web サービスです。
WWW関連の技術を使い、ソフトウェアの機能をネットワークを通じて利用できるようにしたもの。
RESTful な Web サービスとは、Web (WWW) の設計原則に従って設計された Web サービスのことです。
Web とか Web サービスとかごっちゃになってきそうなので、Web の定義をここで見ておきます。
Web (WWW) とは
インターネット上で標準的に用いられている、文書の公開・閲覧システム。文字や画像、動画などを一体化した文書をネット上で公開・配布したり、また、それを入手・閲覧することができる。文書内に別の文書への参照を埋め込むことができる「ハイパーテキスト」と呼ばれるシステムの一種。“web”とは蜘蛛の巣の意味であり、大規模なハイパーテキストの文書間の繋がりを図示すると複雑な蜘蛛の巣のように見えることからこのように呼ばれる。
すなわち、蜘蛛の巣状に広がった文書の公開・閲覧システムが Web であり、その上で提供されるサービスが Web サービスということになるんだと思います。
従って、RESTful な Web サービスは具体的には以下のようなサービスを指すと考えられます。
- 基本的にステートレスなやりとりで実現されている
- HTTPの標準メソッドでリソースへの操作が提供されている
- リソースはURI (URL) で一意に特定可能である
- HTMLやXMLなどのハイパーメディアフォーマットを使用している
REST のメリット
REST の良さは「シンプルさ」だと思います。
シンプルさはスケールするためには非常に重要だと思います。
基本的にシンプルなものっていうのは、広がりやすいと思います。
まとめ
まとめると以下のようになるんじゃないかと思います。
- REST は リソースのやりとりに関する4つの原則を集めたものである
- ステートレスなクライアントサーバ
- リソースへの統一インターフェース
- リソースのアドレス可能性
- リソースのハイパーメディア性
- Web サービス に限定した REST の意味は Web っぽいかである
あってると良いな!
*1:Web は REST の設計原則を満たしており RESTful