こんにちは、キャスレーコンサルティングのSI(システム・インテグレーション)部の樋口です。

今回RESTとは何なのかについて調べたのでまとめさせていただきます。

Webアーキテクチャの抽象化=REST

そもそもRESTはRoy Fieldingという人物が博士論文で発表したものでした。
これはWebに関する論文でした。
Webのユーザーは全世界にいます。

Roy Fieldingは、なぜこれほど大規模なシステムが成立したのか興味を持ち、
ソフトウェアアーキテクチャの観点から分析を行いました。
彼はWebアーキテクチャを抽象化し、RESTという一つのアーキテクチャスタイルとしてまとめたのです。

RESTというアーキテクチャスタイル(制約)

アーキテクチャスタイルというのは、日本語では「建築様式」と訳せますが、見方を変えるとそれはアーキテクチャに対する制約を意味します。

これはアーキテクチャに限った話ではなく、あるスタイルを採用するためには必ず何らかの制約に従わざるを得ません。
実は、RESTは一つではなく、複数のアーキテクチャスタイル(制約)で出来ています。
Fielding氏によれば、これらの制約こそがWebの成功要因であるということになります。

RESTを構成するアーキテクチャスタイル

■クライアント/サーバー
 ・UI/処理を分離することで疎結合になり、クライアントもサーバーも変更に強くなる
■ステートレスサーバー
 ・クライアントとの通信はステートレスに行われるため、通信の可視性、通信失敗時の信頼性、状態がないことによる拡張性が向上する
 ・ステートフルのメリットは得られない
■キャッシュ
 ・クライアントとサーバーの通信回数を減らすことで、サーバーのリソースを有効に使える
■統一インターフェイス
 ・RESTの重要なアーキテクチャスタイル
 ・クライアントとサーバーの通信インターフェイスを固定化することで、通信が単純化され、通信の可視性、実装とサービスの疎結合性が向上する
■階層化システム
 ・システムを役割ごとにレイヤーとして分割することで、サーバー間が疎結合になる
■コードオンデマンド
 ・プログラムをクライアント側にダウンロードして実行できることで後から拡張することが容易になる

Webになじみのある方からするとごく当たり前に感じる制約ばかりですね。
Fielding氏は、この中で特にRESTにとっては「統一インターフェイス」が重要であるとしています。

これはRESTのリソース指向と密接な関係にあります。

RESTのリソース指向

RESTはWebアーキテクチャの抽象化だと言いました。
先ほどのアーキテクチャスタイルは、コンポーネント(ここではクライアントやサーバーのこと)に対する制約を意味していますが、RESTが抽象化しているものはコンポーネントだけではありません。

それらのコンポーネントが扱うデータについても抽象化されています。
Webでやり取りされるデータと言えば、ハイパーメディアです。
ハイパーテキストというのはHTMLのようなリンク機能を持ったテキストですが、
ハイパーメディアはリンク機能を持った動画や音声を含むマルチメディアのことを指します。

RESTは、特定のアーキテクチャや実装ではないため、Webのようにハイパーメディアをやり取りするものと決まっていません。
RESTは、Webにおけるハイパーメディアのやり取りもまた抽象化し、「リソース」をやり取りすると考えます。
このリソースというのは抽象的な概念であり、特定のテキストやマルチメディアを指しません。
いわゆる論理設計上のリソースであるという認識が重要です。

この論理的なリソースのやり取りを実現するためには、実装上は物理的なリソースをやり取りする必要がありますが、
Fielding氏はこれをリソースに対する表現(Representation)と呼びました。

ここでいう表現とは、データそのものとメタデータを含む物理的なバイト列のことを指します。

REpresentaitional State Transfer

RESTとは何を意味しているのでしょうか。
それは先ほど述べたリソースの表現をやり取りすることで、リソースの状態を変化させることを意味しています。

Fielding氏は、それこそRESTに従うシステムの理想的な振る舞いであると言っています。

なぜRESTが重要か

RESTの制約やリソース指向に従うのは、Webと親和性が高いのですが、RESTが重視されるには時間がかかりました。
現実的な問題は、以前まではWebアプリケーションの主流だったSOAPとWS-*の技術スタックの複雑になったことにあったのでしょう。
SOAPは、HTTP上に作られた上位のプロトコルです。

SOAPとWS-*の技術スタックは非常によく用いられましたが、
仕様が複雑になりすぎていましたし、仕組みとしてスケーラビリティに難を抱えていました。

SOAPを使用したアプリケーションを作成するにはこのプロトコルを理解する必要がありますし、クライアント側もSOAPを使って通信しなければいけません。

2010年には、2002年からSOAP周辺技術の仕様策定を行ってきたWS-Iの活動が正式に終了しました。
http://www.publickey1.jp/blog/10/restsoapwebws-i.html

対して、RESTの制約を守るRESTfulなアプリケーションは、新しいプロトコルではなくHTTPそのものを使用します。
HTTPというWebの標準技術を用いる訳ですから、ほとんどの人にとって学習コストは非常に少なく、無用な複雑さを回避できます。

SOAPよりも軽量であり、Webのスケーラビリティを享受できるアーキテクチャスタイルだったことで人気が高まっているのではないかと思います。

まとめ

  • RESTはWebアーキテクチャが抽象化されたアーキテクチャである
  • RESTは複数のアーキテクチャスタイルを組み合わせたものである
  • RESTはリソース指向を前提としている
  • SOAPやWS-*は複雑でスケーラビリティに難があったため、RESTが注目されてきている

参考文献

『Architectural Styles and the Design of Network-based Software Architectures
http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

『Webを支える技術――HTTP、URI、HTML、そしてREST』
『RESTful Webサービス』