年末ですね。今回は『Webを支える技術』を読んだので、REST周りを改めてまとめていきたいと思います。
REST(Representional StateTansfer)
- 数あるアーキテクチャスタイルの中でもネットワークシステムのアーキテクチャスタイル
- クライアント/サーバー アーキテクチャスタイルから派生したもの
- クライアント/サーバー アーキテクチャスタイルに制約を加えていく
具体的には、RESTとは以下の6つのアーキテクチャスタイルを組み合わせた複合アーキテクチャスタイルのことを言う。
- クライアント/サーバー [UIと処理の分離]
- ステートレスサーバー [サーバー側でアプリケーションの状態を持たないようにする]
- キャッシュ [クライアントとサーバーの通信回数量を減らす]
- 統一インターフェイス [インターフェイスを固定する。http1.1ではGETやPOSTなどメソッドを8つに固定して通信する]
- 階層化システム [システムを階層に分離]
- コードオンデマンド [プログラムをクライアントにダウンロードして実行]
RESTとは制約を課すために、上記、複数のアーキテクチャスタイルを必要に応じて組み合わせて構築した複合アーキテクチャスタイルの1つである。
※そもそもアーキテクチャスタイルとは何かと言うと、アーキテクチャを設計するための作法や流儀である。システムを設計する際の指針がアーキテクチャスタイルとなる。
※制約はアーキテクチャスタイルにおいて、重要な概念。
一般的にはソフトウェアアーキテクチャは複数のコンポーネントを組み合わせて実現することになるが、それぞれのコンポーネントがバラバラに動いているのでは、ソフトウェアとして機能しない。そこで制約を課すことによって、全体として各コンポーネントが協調して動作することを実現するためにアーキテクチャに制約を課すことは非常に重要。
リソース
RESTにおける重要概念の一つが「リソース(Resource)」
リソースとは**『Web上に存在する名前を持ったありとあらゆる情報』の事を示す。そしてその名前とはURI**である。
そのURIを用いる事で、プログラムはリソースが表現する情報にアクセスできる。
※例として、本書では東京の天気予報、駅の写真、ブックマーク等が挙げられている(/~.html, /~.pdf, /~.jpg等)
リソースとは「Web上に存在する情報」という抽象的な概念である。サーバーとクライアントの間で実際のリソースをやり取りするときには何らかの具体的なデータを送信し合う。サーバー・クライアント間でやり取りするデータの事を「リソースの表現」(Resource Representation)と呼ぶ。
WebはRESTという分散ネットワークシステムのための理論があったからこそ、ここまで成功したと言われている。WebサービスやAPIはWebを構成する一部であり、個別のサービスやAPIがRESTful(=RESTらしい振る舞い)になるとWebは全体として良くなると言われている。