前回の記事では,Rails2.0の足回りを簡単に概観しました。今回は,実際にRails2.0の機能を利用し,RESTfulなウェブアプリケーションを作ってみたいと思います。
RESTとは何か
Rails2.0の機能を用いて,RESTfulなアプリケーションを作るまえに―
RESTとは,いったいなんでしょうか?
という問いに対して,正確に答えるには私の知識はこころもとないです。Wikipedia日本語版のRESTの項を引いてみると,「表現可能な状態を転送するもの」と書かれてありますが,これだけ翻訳してもよくわかりませんね。用語としての初出は,2000年に,HTTPプロトコル規格の主要著者の一人であるRoy Fieldingがウェブについて書いた博士論文「Architectural Styles and the Design of Network-based Software Architectures」です。RESTとはそこでFieldingが提案した,Webのアーキテクチャにおけるいくつかの原則です。
なお,Roy FieldingはHTTPプロトコルの主要著者と言うだけでなく,IETFにおいてHTML,URIの標準化に参与した人物であり,Apacheプロジェクトの創始者で,現在もApache HTTP Serverプロジェクトを率いています。彼のことを一言で表現するとまさに,「World Wide Webの神」です。
それでは,Fieldingの論文における「RESTの原則」とはどういったものでしょうか? もっとも重要なのは以下の2点ではないかと思われます。
ステートレスなクライアントサーバ方式
RESTの原則では,HTTPのリクエストに全ての情報を含み,サーバ側に,クライアントの状態を持ちません。この原則は,情報の可視性,アプリケーションの信頼性,スケーラビリティにおいてメリットを持ちます。信頼性,スケーラビリティのもっとも単純な例として,静的なHTMLファイルを想起するとよいかもしれません。デメリットとしては,リクエストに全ての情報を持ってしまうことでデータ送信量が増加し,ネットワークのパフォーマンスの低下の発生が考えられます。
統一インターフェース(Uniform Interface)
RESTを他のアーキテクチャと区別する中心となる概念が,統一インターフェースです。「統一インターフェース」とは,コンポーネント間のやりとりの全てを,リソースを表すURIと,それにたいするHTTPのメソッドで行いましょう,ということです。
インターフェースを統一化することで,アーキテクチャはシンプルになり,コンポーネント間の作用の可視性が増します。これに対する,単純,かつ最強の例としては,HTMLとURIによるリンクによって形づくられた,World Wide Web自体を想起するとよいでしょう。デメリットはフォーマットを統一化するオーバーヘッドによる実行効率の低下です。
RESTfulなURI
RESTの統一インターフェースに対する,わかりやすいたとえとして以下のものがあります。
RESTを文と考える。すると,HTTP Methodsは動詞で,URIは名詞である。
具体的な例を挙げてみましょう。
POST http://bookmark/links
⇒投稿する(動詞)ブックマーク(名詞)リンク(名詞)
GET http://bookmark/links/1
⇒取得する(動詞)ブックマーク(名詞)リンク(名詞)1(名詞)
GET http://bookmark/links/1.xml
⇒取得する(動詞)ブックマーク(名詞)リンク(名詞)1(名詞)XML(名詞)
DELETE http://bookmark/links/1
⇒削除する(動詞)ブックマーク(名詞)リンク(名詞)1(名詞)
この観点からすると,以下のようなURIに矛盾があることがわかります。
GET http://bookmark/links/destroy/1
⇒取得する(動詞)ブックマーク(名詞)リンク(名詞)削除(動詞)1(名詞)
統一インターフェースとしてのRESTfulなURIとは,URIを名詞と考え,HTTPのメソッドを動詞とした際に自然な形になるものといえます。
RESTのイメージだけでもつかんでいただけましたでしょうか?
Rails2.0のRESTサポートの優れた点の一つに,それ自体がRESTの問いに対する明快な回答である,という点があります。そのため,RailsのRESTサポートを見ていくことで,RESTの概念を学習することができるという一石二鳥なメリットもあります。
Railsで作る小さなRESTful Webアプリケーション
さてこのあたりで,今回の題材として,ソーシャルブックマークの代名詞となった,del.icio.us風のブックマークアプリケーションをRESTスタイルで作ってみましょう。安易ですが小さなdeliciousということで,その名もminiciousです。
それでは早速,railsコマンドでRailsアプリケーションのフォルダを作成します。
rails minicious

