##はじめに
本記事はWebを支える技術 HTTP,URI,HTML,そしてRESTを参考にして書いた記事です。
間違い等があればコメントいただけると助かります。
■ Webを支える技術 HTTP、URI、HTML、そしてREST
##RESTとは
Webのアーキテクチャスタイルで下記の6つ特徴を組み合わせたアーキテクチャスタイル。
ネットワークシステムのアーキテクチャスタイルとなる。
######1. クライアント/サーバ
クライアントとサーバで通信のやりとりをする
######2. ステートレスサーバ
アプリの状態をサーバで管理しない
######3. キャッシュ
サーバーとの通信回数を減らす
######4. 統一インターフェース
通信のルールを統一する
######5. 階層化システム
システムを階層に分離する
######6. コードオンデマンド
プログラムをサーバからダウンロードして実行する
###そもそもアーキテクチャスタイルって何?
システムを作る上での作法や様式を表す。
例えば学校では校則がいくつか定められているが、その目的は
学校をより良いものにするためのルール。
アーキテクチャスタイルもそれと同じで、システムをより良くするためのルール。
##6つの特徴
####1. クライアント/サーバ
クライアントがサーバにリクエストを送り、それに対してサーバは、クライアントにレスポンスを返す。
メリットとしてマルチプラットフォーム(PCやスマホなど)で通信ができる。
理由は、単一のコンピュータで処理するのではなく、クライアントとサーバで別々にしているため。
####2. ステートレスサーバ
クライアントのアプリの状態をサーバ側で覚えさせず、クライアント側に覚えてもらう。
メリットとしてはサーバがクライアントの状態を覚えなく良いので、
サーバー処理能力を上げたい時はサーバを増設するだけでよい。
逆にサーバでアプリの状態を管理していることをステートフルと呼び、代表格としてCookieが挙げられる。
サーバを増設して処理能力を上げたい時は、クライアントのアプリの状態を他のサーバと同期しなければならないのでサーバーを増設するのには向いていない。
####3. キャッシュ
一度取得したリソースをクライアント側で使い回す。
具体的な例として、ブラウザなどで一度開いたページをもう一度開くと、最初に開いた時より開く速度が上がっている。
これは一度取得したページをキャッシュに保存してクライアント側で使いまわしたから。
このようにキャッシュを利用することでサーバへの通信を減らし、読み込み時間を短縮させることができる。
####4. 統一インターフェース
クライアントとサーバで通信をする時などのルールを統一したもの。
統一したルールとしてHTTPがありその中で良く使われているのがGETとPOST。
ルールを統一すれば、クライアントもサーバも、そのルールのプログラムを実装すれば良いのでプログラムがシンプルになる。
逆にルールがバラバラだとプログラムを実装するとき、その都度バラバラのルールに合わせて実装しなければならないので複雑になる。
サッカーのルールが3つも4つもあったらルール覚えるのが大変。
それと同じように、バラバラのルールだとその都度実装するのが大変。
####5. 階層化システム
クライアントとサーバの間に、サーバの負荷を分散させる装置(ロードバランサ)を設置したり、アクセス制限をする装置(プロキシ)を設置したりする。
このようにクライアントとサーバ間に装置を挟むと、クライアントとサーバの接続先はロードバランサ、またはプロキシなどに変わる。
そのためクライアントやサーバがリクエストやレスポンスを送る際に通信の方法が変わってくる、かと思いきや、前述した統一インターフェースでルールを統一していれば、通信の方法を気にする必要はない。
####6. コードオンデマンド
JavaScriptなどのプログラムコードをサーバからダウンロードし、それをクライアント側で実行するもの。メリットとして機能を後から拡張できることが挙げられる。
##まとめ
######RESTを適用することで以下の恩恵を授かることができる
- マルチプラットフォームでWebにアクセスできる。
- ステートレスにすることでサーバの処理能力をあげることが容易
- キャッシュを利用することでページの読み込み速度が早くなる
- 統一インターフェースにすることでプロキシなどを設置した時に互換性の問題がない
- サーバからJavaScriptなどをダウンロードすることで機能拡張がしやすくなる