まさ@ブログ書き込み中

まさ@ブログ書き込み中

まさの旅、英語、プログラミング、プライベートについて、色々記録しています。

アーキテクチャスタイルREST【Webを支える技術 第一部 後半】

 

今日は続けて『Webを支える技術』の第一部の後半、REST(Representational State Transfer)と「アーキテクチャスタイル」というものについて出来るかぎりわかりやすく完結にまとめていきます。

 

 

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

 

 

 

30分で書きます!

 

 

アーキテクチャスタイルとは

正直に言うと、このポイントに関しては何度も読みましたがあまりしっくりきませんでした・・・。

 

わかっていることだけをまとめると

アーキテクチャとは、

情報システムの設計方法、設計思想、およびその設計思想に基づいて構築されたシステムの構造などのことである。 

MVCについては以下参照。

MVCモデルの概念を漫画で解説してみる | hijiriworld Web

 

むむ・・MVCアーキテクチャではないのか?と思うかもしれませんが、どうやらこれもアーキテクチャスタイルのようです。

 

でも少なくとも「アプリケーションやシステムの設計の方法・思想・構造」についてのことだということはわかりました。

 

 

RESTはどんなアーキテクチャスタイル?

便利なのでまたもや箇条書きでまとめます。

 

なんのことかさっぱりだと思うので、具体的な理由と共に見ていきませう。

 

 

RESTは複合アーキテクチャスタイル

実は、RESTは複数のアーキテクチャスタイルを組み合わせて構築した複合アーキテクチャスタイルなのです。

 

クライアント/サーバに他のアーキテクチャスタイルを追加して制約を課していくことでRESTを構成しているのですね。

 

そのアーキテクチャスタイルとは、以下のようなもの。

  1. クライアント/サーバ
  2. ステートレスサーバ
  3. キャッシュ
  4. 統一インターフェース
  5. 階層化システム
  6. コードオンデマンド

 

音速で1つ1つをまとめます。

 

1.クライアント/サーバ

HTTPというプロトコルでクライアントとサーバが通信するアーキテクチャスタイル。

 

このおかげでクライアントをマルチプラットフォームにできます。例えばPCだけでなく携帯電話やゲーム機からもいまはWebへアクセスできますね。

 

また、サーバはデータストレージとしての機能だけを提供すればよくなり、複数のサーバを組み合わせて冗長化予備装置を平常時からバックアップとして配置し運用しておくこと)することで可用性(システムが継続して稼働できる能力のこと)を上げられます。

 

2.ステートレスサーバ

ここでいうステートレスとは、クライアントのアプリケーション状態をサーバで管理しないことを意味します。

 

これによってサーバ側の実装を簡略化できます。実際には、Cookieを使ったセッション管理によってHTTPをステートフルにするWebサービスやWeb APIが多々あります。

 

クライアント/サーバにステートレス性を導入すると、アーキテクチャスタイルは「クライアント/ステートレスサーバ」になります。

 

3.キャッシュ

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

 

いちいち同じリクエストの結果をサーバから待つ必要がなくなるから楽。

 

キャッシュを追加したアーキテクチャスタイルは、「クライアント/キャッシュ/ステートレスサーバ」と呼びます。

 

4.統一インターフェース

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

 

HTTP1.1ではGETやPOSTなど8個のメソッドだけが定義されていて、通常はこれ以上メソッドが増えません。このインターフェースへの制限こそがアーキテクチャをシンプルにして、かつクライアントとサーバの実装の独立性が向上します。

 

このアーキテクチャスタイルを「統一/クライアント/キャッシュ/ステートレスサーバ」と呼びます。

 

5.階層化システム

統一インターフェースの利点の一つとして、システム全体が階層化(ある要素が複数集まることでひとつのユニット(集合体)を形成すること)しやすいことがあります。

 

必要に応じてクライアントとサーバの間にプロキシ(システムを複数階層に分割する機能)を設置したり、インターフェースの違うレガシーシステムに接続するためにWebアプリケーションサーバを挟んだりしても、クライアントからすると同じインターフェースで接続できます。

 

このようなアーキテクチャスタイルを「統一/階層化/クライアント/キャッシュ/ステートレスサーバ」と呼びます。

 

6.コードオンデマンド

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

 

 

アーキテクチャスタイルとアーキテクチャの違いわかった気がする

ここまでくると、なんとなくつかめてきた気もします。

 

本書のこの文章を見るとさらにヒントを得られそうです。

 

RESTはアーキテクチャスタイルなので、実際にシステム(Webサービスもそれ以外も含む)を設計する際はそのシステムのアーキテクチャを作らなければなりません。

 

RESTの中身は、大まかにネットワークの構想でした。クライアントやサーバの関係、インターフェースを統一することでクライアントとサーバの間に他のシステムを入れることができる階層化、クライアントをあとから拡張できるコードオンデマンド・・・。

 

その大まかな構想が決まったあとに考えるべき、その一つ一つの要素についての設計図、構想や思想こそがアーキテクチャではないでしょうか。

 

80%違う自信がありますが、少なくとも端には引っかかっていて欲しいですね。

 

では、時間がないのでここで終わります。

 

 

40分かかってもうた。。

 

ばい。