Webを支える技術:3章:REST – Webのアーキテクチャスタイル

Webを支える技術とは?

技術評者社から出されている技術書で、以下は公式サイトからの概要引用です。

Webは誕生から20年で爆発的な普及を果たし,17億人のユーザと2億台のサーバを抱える巨大システムへと成長しました。Webがここまで成功した秘密は,その設計思想,いわゆるアーキテクチャにあります。Webのアーキテクチャ,そしてHTTP,URI,HTMLといったWebを支える技術は,Webがどんなに巨大化しても対応できるように設計されていたのです。

私たちが作る個々のWebサービスも,Webのアーキテクチャにのっとることで成功へとつながります。Webのアーキテクチャに正しく適応したWebサービスは,情報が整理され,ユーザの使い勝手が向上し,ほかのサービスと連携しやすくなり,将来的な拡張性が確保されるからです。

本書のテーマは,Webサービスの実践的な設計です。まずHTTPやURI,HTMLなどの仕様を歴史や設計思想を織り交ぜて解説します。そしてWebサービスにおける設計課題,たとえば望ましいURI,HTTPメソッドの使い分け,クライアントとサーバの役割分担,設計プロセスなどについて,現時点のベストプラクティスを紹介します。

引用:http://gihyo.jp/magazine/wdpress/plus/978-4-7741-4204-3/

Webを支える技術 HTTP、URI、HTML、そしてREST (WEB+DB press plusシリーズ) [ 山本陽平 ]

3章:REST – Webのアーキテクチャスタイルをまとめてみました。

アーキテクチャスタイルの重要性

  • REST:Representational State Transfer
  • RESTはWebのアーキテクチャスタイルの一つ
  • アーキテクチャスタイルとは、アーキテクチャの様式・作法あるいは流儀のこと
  • RailsのMVCなどもそれにあたる

アーキテクチャスタイルとしてのREST

  • RESTはネットワークシステムのアーキテクチャスタイル
  • ネットワークシステムのアーキテクチャスタイルとして最も有名なのはクライアント/サーバ
  • WebのアーキテクチャスタイルはRESTであり、クライアント/サーバである
  • RESTはクライアント/サーバアーキテクチャスタイルに制約を加えたもの

リソース

  • RESTにおける重要な概念の一つがリソース
  • リソースとは、Web上に存在する、名前を持ったありとあらゆる情報のこと
  • リソースはそれぞれURIでユニークな名前をもつ
  • URIを用いることで、プログラムはリソースが表現する情報にアクセスできる

URIの発明前はサーバに置いたファイルの場所を他人に教えるには下のような文面を書くしかなかった。

例のファイルをftp.example.jpに置きました。
ディレクトリは/public/dataで、ファイル名はsample_file.gzです。
このサーバはanonymos FTPなので、匿名ユーザでログインしてください。

URIがある現在では、ftp://example.jp/public/data/sample_file.gzという一行を共有すれば済む。

このようにURIがリソースを簡単に指し示せる性質をアドレス可能性と呼ぶ。

リソースは抽象的な概念なので、クライアント/サーバでリソースをやり取りするときは何らかの具体的なデータを送信し合う。このやり取りするデータのことを「リソースの表現」(Resource Representation)と呼び、URIで表す。また、リソースには「状態」(State)があり、時間の経過に伴ってリソースの状態が変化すると表現も変わる。

スタイルを組み合わせてRESTを構成する

RESTは以下複数のアーキテクチャスタイルを組み合わせて構成した複合アーキテクチャである。

クライアント/サーバ

  • ユーザーインターフェースと処理を分離すること
  • クライアントはサーバにリクエストを送り、サーバはそれに対してレスポンスを返す
  • サーバはデータストレージだけを提供すれば良くなる
  • クライアント側はストレージを気にせず、マルチプラットフォームにできる

ステートレスサーバ

  • クライアントのアプリケーション状態をサーバで管理しないこと
  • サーバの実装を簡略化できる
  • 例:リクエストに応えたあとすぐにサーバの計算機リソース開放する

キャッシュ

  • サーバとクライアントの通信回数と量を減らすこと
  • 一度取得したリソースをクライアントで使い回す
  • ネットワーク帯域の利用や処理時間を縮小し、より効率的に処理できる
  • ただし、古いキャッシュのりようにより情報の信頼性が下がる可能性がある

統一インターフェース

  • インターフェースを固定すること
  • HTTP1.1ではURIで指し示したリソースの操作をGETやPOSTなどの8個のメソッドだけに限定

階層化システム

  • 名前の通り、システムを階層に分離すること
  • ロードバランサを噛まして負荷分散したりプロキシによってアクセス制限ができる
  • これはインターフェースが統一されていることにより得られる恩恵

コードオンデマンド

  • プログラムコードをサーバからダウンロードしてクライアント側で実行すること
  • JavaScriptやFlashなどがそれにあたる

まとめ

  • RESTは統一/階層化/コードオンデマンド/クライアント/キャッシュ/ステートレスサーバというアーキテクチャスタイル
  • Uniform Layered Code on Demand Client Cache Stateless Server
  • 略して、ULCODC$SS (cacheと同じ発音の現金cashからドルマークをあてる)のことをFieldingはRESTと名付けた
この記事の内容が役に立ったと思いましたら、SNSで記事を共有していただけますと幸いです。