アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 特集 » Rails2.0の足回りと中級者への道 » 第2回 Rails2.0で作るRESTfulアプリケーション(前編)

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

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

前回の記事では,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にはまり中。

トラックバック

  • [rails]「第2回 Rails2.0で作るRESTfulアプリケーション(前編)」完了!

    筆者の鎌田さんの助けも得て、miniciousを動作させる事ができるようになりました。 次は後編にチャレンジです! なんとかRailsをものにしたいです。

    Tracked : #2  気負わない日記 (2008/05/24, 16:53)

  • [rails]modelの:throughってなに?

    PHPばかりじゃなんなのでちょこちょこRailsやらObjective-Cやらを学習してる訳なのですが Rails2.0の足回りと中級者への道をやってて ちょっとつまずいたのでメモ モデルの:throughってなんですか? こんな感じで使われているのですが、何の用途なのかさっぱりです。 class

    Tracked : #1  気負わない日記 (2008/05/23, 00:49)

コメント

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

    筆者の鎌田です。

    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)

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

読むウェブ ~本とインタラクション

ディスプレイで読む活字とそのインタラクション(interaction:相互作用)について,最新Webを紹介しながら読み解いていく。

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

Windows phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows phoneアプリケーションの開発をしてみませんか?

ここは知っておくべき!Windows Server 2008技術TIPS

5年ぶりのサーバOSとなったWindows Server 2008が出荷されて早2年。2009年にはR2が出荷され,再び注目を集めています。発売前から実施したトレーニングによって感じた,インフラエンジニアの方々に知っておいていただきたい機能を中心にご紹介します。

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス