はじめに
RESTとはRepresentational State Transferの略で、この用語はロイフィールディングによって作られました。 RESTというのはWebサービスでよく使われ、Applicationとの間の結合度を下げるように設計するアーキテクチャスタイルです。 結合度を下げてサーバクライアントが別途に構築され、結合されるようにします。
アーキテクチャ的な結合度を下げるためにRESTは上記の6つの制約条件を備えています。 こうした制約条件をきちんと守れば、このシステムはRESTfulなシステムになるのです。
今日は、それぞれについて簡単に説明したいと思います。
Client-Server
ユーザに提供するinterfaceであるUser Interfaceとデータストレージ、アルゴリズムなど、サーバ内部の作業を分離することで、User Interfaceは様々なプラットフォームでの移植性を向上させることができ、サーバはその構成要素を単純化して拡張性を単純化できます。
クライアントとサーバが互いに依存することなく、別途に進化することができます。 クライアントはサーバのリソースURIを知っていればいいからです。
Stateless
クライアントからサーバへの各要請には、その要請を理解するために必要なすべての情報が含まれなければなりません。 サーバに保存された環境情報を利用して利得[サーバ内のクライアント情報の維持など]を取ってはいけません。 したがって、セッション情報は全てクライアントが持っていなければなりません。
ログインしたというセッションの維持が必要なら、その情報もクライアントが当該情報を持ってサーバーに伝達しなければならない。 [ex) JWT等を使用]
Cacheable
要請に対する応答内のデータに該当する要請がキャッシュに可能であるかどうかを明示しなければなりません。 応答をキャッシュできるなら、クライアントから同じ要請が来たときに応答データを再利用できるようにしてください。
cache-controlヘッダーでキャッシュの有無を明示する。
Uniform Interface
全体的なシステム·アーキテクチャを簡単かつよく把握できるようにするための約束されたInterface、当該規約をRESTをユーザが守ることで、後に使用するクライアントを開発するユーザとサーバーを開発するユーザとの結合度が低くなる可能性がある(Decoupling)。 開発RESTは規約で4つを示します。
identification of resources
manipulation of resources through representations
self-descriptive messages
hypermedia as the engine of application state.
Layered System
階層化されたシステム·アーキテクチャを使用して各構成間の階層を自由に相互作用できないように制限することで、Interfaceを一元化できます。
Code on demand (optional)
サーバがネットワークを通じてクライアントに伝達したjavascriptなどのプログラムは、それ自体で実行されなければならない。 このことは、事前実装に必要な機能の数を減らすことでクライアントを単純化します。
この言葉は、普段は静的なデータをxmlまたはjsonに入れてclientに送り、clientがこれを加工します。 ですが、code on demandとは、clientに送るデータをすぐに実行可能なコードを送ってClientで実行することです。