むじんブログ ”3歩進んで2歩下がる”

37歳未経験からのエンジニア転職を目指す営業部長

学習のアウトプット(Webアーキテクチャ)

アーキテクチャ

Webサービスを形作る構造のこと。

Webであれば、構成の元になっているブラウザ・HTTPやHTMLなどがアーキテクチャになる。

 

アーキテクチャスタイル】

Webサービスを作る(アーキテクチャを決める)際の設計方針のようなもの。

アーキテクチャスタイルに沿って設計を行うことで、分かりやすく使いやすいサービスとなる。

例えばWEBアプリケーションであればMVCモデル・クライアント・サーバー・オブジェクト志向などがこれに当たる。

 

例)家の設計

どのような家にするか→アーキテクチャスタイル

家の各部屋やトイレ・玄関など→アーキテクチャ

 

【REST】

Webのアーキテクチャスタイルの1つで、よく起用される洗練されたもの。

RESTに従って実装を行うことでより良いWebサービスになるが、RESTのうちいくつかを除外したり、RESTに従わないように実装しても問題はない。

Representational State Transfarの略。

(左からそれぞれ「代表的な」「状態」「伝達」の意味)

 

アーキテクチャスタイルの中で最も有名なもの→クライアント/サーバー

REST→クライアント/サーバーにいくつかの構成を加えたもの

 

【リソース】

Web上で名前を持ったあらゆる情報。

RESTでは情報をリソースという考え方で表現する。

リソースがどこにあるかを示すのがURLとなる。

=URLを用いてリソースの閲覧をするということ。

 

例)

リソース:渋谷駅の天気・画像

リソース元URL:Yahoo天気・フリッカー(というサイト)の画像

1つのリソースは複数の情報を持っていたり、変化したりすることもある。

 

【RESTの構成】

RESTは、クライアント/サーバーを含む6つのアーキテクチャスタイルから構成されている。

 

・クライアント/サーバー

・ステートレスサーバー

・キャッシュ

・統一インターフェイス

・階層化システム

・オンデマンド

 

【ステートレスサーバー】

クライアントの状態を管理しないサーバー。(ステートレス=状態がない)

クライアントはリクエストごとに全ての情報を送らなければならないが、サーバー側の実装は簡単で済む。

 

【キャッシュ】

一度得たリソースをクライアント側で使い回す仕組み。

クライアントとサーバー間の通信回数が減るので、効率化になる。

デメリットとして、古いキャッシュの情報を使い回すことにより、実際の変更が反映されないことがある。

(例えば元のCSSが変更されているのに、キャッシュ内のCSSが古くて画面が変わらない、など)

 

【統一インターフェイス

使用するメソッドを固定すること。

例えば通信のHTTPメソッドをGETやPOSTなどに固定することで、全体をシンプルにするなど。

RESTのアーキテクチャスタイルの中で最も特徴的なもの。

 

【階層化システム】

システムを階層に分けて負担を分散したりするもの。(例えばクライアントとサーバーの間など)

統一インターフェイスの恩恵によって実現できる。

 

【コードオンデマンド】

JavaScriptのように、プログラムをクライアント側で実行すること。

メリット:クライアントは後から機能を追加していける。

デメリット:クライアントとサーバーでやりとりしているリソースが明確でなくなる。

 

SOAP

Simple Object Access Protocolの略。

通信する上でのルール(規約)で、リクエストやレスポンスをコンピュータが読み取りやすいデータでやり取りすること。

 

メリット:高機能で拡張性がある

デメリット:構成が複雑で、他のシステムと連携がしにくい

RESTは他のサービスとの連携が容易なので、例えば自身のサイトにGoogleMapを格納したりなどが簡単にできる。(ただしREST自体の拡張性は低い)

SOAPは、複雑な処理をしたり、セキュリティの設定が必要なサービスなどに向いている。

 

【RESTを使うべき理由】

・構成がシンプル

リソースは全てURLで表現され、それを4つのHTTPメソッド(GET・POST・PUT・DELETE)でやり取りするだけでOK。

 

・ステートレスで負荷がかかりにくい

ユーザーの情報を保持しないので負荷がかかりにくく、複数のリクエストが集中しても複数のサーバーで対応ができるなど負担を軽減できる。

 

【RESTful】

RESTの原則に従って実装されている状態のこと。

GoogleTwitterもRESTfulに実装されている。

また、Ruby on Rails自体もRESTfulな設計になっている。