Rails2.0の足回りと中級者への道

第2回 Rails2.0で作るRESTfulアプリケーション(前編)

この記事を読むのに必要な時間:およそ 9.5 分

前回の記事では,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

著者プロフィール

鎌田達哉(かまだたつや)

SI企業勤務。10年ほど前にはじめて自分で行ったプログラミングはRubyによるものであったが,語ってもにわかには信じてもらえないような紆余曲折を経て現在に至る。現在は,JVM上の言語実装に興味あり。ありがちですが,Scalaにはまり中。

コメント

  • ご指摘ありがとうございます

    筆者の鎌田です。

    pipin さま。ご指摘ありがとうございます。
    私の確認不足です。

    サンプルのminiciousプロジェクトも

    app/controllers/links_controller.rb
    --
    @link.users << current_user

    @link.user = current_user
    --

    のように修正しました。2箇所のtypoというのは
    以上でよかったでしょうか?

    Commented : #2  鎌田 (2008/05/20, 18:37)

  • typo

    ./script/plugin install scafollding

    ./script/plugin install scaffolding

    それから、サンプルのminiciousプロジェクトにもtypoあり。
    2カ所

    Commented : #1  pipin (2008/05/20, 07:51)

コメントの記入