0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

REST編2

Posted at

クライアント/サーバ(RESTの基本)

webはHTTPというプロトコルでクライアントとサーバが通信するクライアント/サーバのアーキテクチャスタイルを採用しています。下図参照
we_we_01.png

クライアント/サーバの利点は、単一のコンピュータ上ですべての処理をするのではなく、
クライアントとサーバの二つに分離して処理すること

これにより、クライアントをマルチプラットフォームにすることができる。

例えば、現在のwebはPCだけでなく携帯電話だけでなくゲーム機からもアクセスすることができる。

クライアントはUIを担当し、

サーバはデータストレージを担当する。

→複数のサーバを組み合わせることで可用性を広げることができる。

クライアントサーバの設計モデルに諸々を追加してRESTを構成する

ここでいう諸々とは、

  • ステートレスサーバ
  • キャッシュ
  • 統一インターフェース
  • 階層化システム
  • コードオンデマンド

ステートレスサーバ

ステートレスは、「クライアントのアプリケーション状態をサーバで管理しない」こと

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

逆にHTTPをステートフルにするのが、Cookie。
これはRESTの理論的には間違いであるが、Cookieがやめるべきであるわけではない。

ステートレスサーバが加わると、
クライアント/ステートレスサーバとなる。
毎回リクエスト通りの出力が返ってくるということだ。

statelessserver.png

キャッシュ

キャッシュは**「リソースの鮮度に基づいて一度取得したリソースをクライアント側で使い回す」**ということ

キャッシュの利点は、「サーバとクライアントの間の通信を減らすことで、ネットワーク帯域の利用や処理時間を縮小しより効率的に処理できること

キャッシュを追加すると、
クライアント/キャッシュ/ステートレスサーバとなる。
cf7d30e1.png

統一インターフェース

統一インターフェースは**「URIで指し示したリソースに対する操作を統一した限定的なインターフェースで行うこと」**

インターフェースに制限を書けることで、全体のアーキテクチャスタイルがとてもシンプルになり、
インターフェースを統一することで、クライアントとサーバの実装の独立性が向上する。

統一インターフェースを追加すると、
統一/クライアント/キャッシュ/ステートレスサーバとなる。
db9e9314.png

階層化システム

統一インターフェースの利点の一つに、階層化しやすいという点がある。
例えば、サーバとクライアントの間にロードバランサを設置して負荷分散したり、プロキシを設置してアクセスを制限したりする。

クライアントからするとサーバもプロキシも同じインターフェースで接続できるので接続先がサーバからプロキシに代わったことを意識する必要はありません。
これはサーバやプロキシなど各コンポーネント間のインターフェースをHTTPで統一しているから実現することができる。

da9dc342.png

このようにシステムをいくつかに改装に分離するアーキテクチャスタイルを階層化システム(Layered System)という。

階層化システムを追加すると、
統一/階層化/クライアント/キャッシュ/ステートレスサーバとなる。

コードオンデマンド

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

例えば、JavascriptやFlashやJavaアプレットなどがこれに該当する。

コードオンデマンドの利点は、クライアントを後から拡張することができること。
クライアントプログラムにあらかじめ用意された機能だけでなく新しい機能を追加していける。

欠点は、ネットワーク通信におけるプロトコルの可視性が低下すること。

HTTPというアプリケーションプロトコルに従って通信している場合は通信の意味やアクセスするリソースは明白ですが、コードオンデマンドを用いてプログラムをダウンロードしクライアント側で実行してしまうと、アプリケーションの可視性が低下する。

コードオンデマンドを追加すると、
統一/階層化/コードオンデマンド/クライアント/キャッシュ/ステートレスサーバとなる。
a0dd5e7e.png

この統一/階層化/コードオンデマンド/クライアント/キャッシュ/ステートレスサーバこそが、
RESTなのです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?