RESTについて得た知識をざっくりまとめる


山本陽平氏の著書である「webを支える技術」を読み、RESTについて勉強したので、知識の定着を目的にアウトプットします。

エンジニア初心者の方が「REST」について興味を持つきっかけになれば幸いです。

RESTとは

RESTとwebのアーキテクチャスタイルのこと。

英語に馴染みがないと「アーキテクチャ」って何ってなりますよね笑

IT分野でアーキテクチャを使用する時は、

「コンピュータやソフトウェア、システム、あるいはそれらの構成要素などにおける、基本設計や共通仕様、設計思想などを指す」

上記で使用されることが多いようです。

元々は建築における建築様式や工法、構造などを表す言葉らしい。

分かりやすい言葉を使うとするなら「従うと良いルール」くらいの意味になるかなと。

そしてRESTは多くのアーキテクチャスタイルの中で、ネットワークシステムのアーキテクチャスタイルに分類される。

ネットワークシステムのアーキテクチャスタイルで最も有名なのは「クライアント/サーバ」

この「クライアント/サーバ」にいくつかの制約を付け加えると「REST」というアーキテクチャスタイルになる。

RESTが分からないという人はこの上記の考え方が抜け落ちているかもしれないと思う。

実際のところ自分はこの本を読むまで「REST」と「クライアント/サーバ」は全く関係ない概念だと想っていたので、、、

RESTアーキテクチャスタイルを構成する6つの要素

前段落で「クライアント/サーバにいくつかの制約を付け加えると「REST」というアーキテクチャスタイルになる」と記述しました。

そんな「クライアント/サーバ」みたいなアーキテクチャスタイルを6つ組み合わせると「REST]というアーキテクチャスタイルになります。

※ただし実際に設計するシステムによってはいくつかのアーキテクチャスタイルを除外する場合もある。

要するにRESTは複数のアーキテクチャスタイルを組み合わせて構築した複合アーキテクチャスタイルになります。

クライアント/サーバ

詳しい説明は割愛しますが、HTTPというプルトルコで通信するアーキテクチャスタイル。

クライアントはサーバにリクエストを送り、サーバはそれに対してレスポンスを返します。

ステートレスサーバ

「ステートレス」とはクライアントのアプリケーション状態をサーバで管理しないことを意味するアーキテクチャスタイルです。

サーバがアプリケーション状態を管理しないことの利点は、サーバ側の実装を簡略化できることにあります。

簡略化することでクライアントからのリクエストに答えたあとにすぐにサーバの計算機リソースを開放することが可能になります。

実際にはCookieを使用したセッション管理を行っているwebアプリケーションが多いのでステートレスサーバをみたしていないwebアプリケーションは多いです。

キャッシュ

キャッシュとはリソース(URLとほぼ同義)の鮮度に基づいて一度取得したリソースをクライアント側で使い回すアーキテクチャスタイルのこと。

「CSSを書き直したので反映されていない?」と悩んだ経験のある方は多いでしょう。

それはこのキャッシュが設計に用いられているからだと言えます。

キャッシュを利用するメリットはサーバとクライアント間の通信を減らすことで処理が効率的になることです。

ただし古いキャッシュを利用してしまいCSSが反映されないなど、情報の信頼性が下がる可能性があります。

統一インターフェイス

統一インターフェイスとは、URI(URL)で示したリソースに対する操作を統一した限定的なインターフェイスで行うアーキテクチャスタイルのこと。

これだけだと何のことやら、、、って感じになるのですが、HTTP1.1では馴染みのある「GET」や「POST」を含めて8個のメソッドが定義されていて通常がこれが増えることはありません。

このようにリソースに対する操作(HTTP1.1で言うと「GET」や「POST」などのメソッド)が限定的である場合、統一インターフェイスのアーキテクチャスタイルが守られていると言えるようです。

この統一インターフェイスが最もRESTを特徴づけるアーキテクチャスタイルになっています。

階層化システム

システムをいくつかの階層に分離する設計を階層化システムと言います。

統一インターフェイスを用いることで同じインターフェイスで接続が可能になるのでシステム全体が階層化しやすくなります。

コードオンデマンド

コードオンデマンドとはプログラムコードをサーバからダウンロードし、クライアント側でそれを実行するアーキテクチャスタイルのことです。

馴染みがあるものではJavaScriptなどが実行できることを差します。

RESTを構成するアーキテクチャスタイルのまとめ

ここまで説明した6つのアーキテクチャスタイルを組み合わせ物がRESTになります。

要約すると下記のようになります。

- クライアント/サーバ:ユーザインターフェイスと処理を分離する
- ステートレスサーバ:サーバ側でアプリケーション状態を持たない
- キャッシュ:クライアントとサーバの通信回数と量を減らす
- 統一インターフェイス:インターフェイスを固定する
- 階層化システム:システムを階層に分離する
- コードオンデマンド:プログラムをクライアントにダウンロードして実行する

冒頭にも述べましたが、この全ても満たさないとRESTに基づいたアーキテクチャという訳ではなくWEBアプリケーションによってはいくつか除外しているものもあります。

この辺りの設計がエンジニアの腕の見せ所になるのではないでしょうか。

RESTを用いることの恩恵

本当に説明するとなると、ものすごく長くなるのでしょうが簡単に重要点をだけをまとめると、

- 「接続性」を持つ(リソースをリンクで接続することで1つのアプリケーションを構成することが可能という考え方)
- 統一インターフェイスによってインターフェイスが固定されるため互換性の問題が発生しない

この2つのメリットがあるからRESTというアーキテクチャスタイルがWebで使用されてるのだと感じました。

まとめ

今回は山本陽平氏の著書である「webを支える技術」から学んだRESTについてアウトプットしました。

「webを支える技術」ではREST以外にも知っているようで上手く説明が難しい「HTTP」、「URI」、「HTML」などが説明されています。

興味がある人は読んでみることをオススメします!