« 第5回全日本スヌーカー選手権 | メイン | DHH loves REST!? その2(ActiveResource) »
2006年06月15日 (木)
DHH loves REST!? その1(RESTプラグインの紹介) [テクニカル]
日本Rubyカンファレンス2006。DHHのセッション内容がヤバイ。チケットが入手できなかったので聞けなかったけど(発表資料くれー)。タイトルが「One controller, many ins, many outs」→「Discovering a world of Resources on Rails」。うひょー。世界リソース発見。
Blogなどでレポートを書いてるみなさんありがとうございます。以下関係部分を引用。
moroの日記 - 日本Rubyカンファレンス2006 二日目より
- CRUD素晴らしい
- HTTPのメソッドで、既にCRUDできるじゃん。HTTPのPOST GET PUT DELETEメソッドとコントローラのアクションcreate show update destroy、SQLのINSERT SELECT UPDATE DELETEは直接に対応してるじゃん。
- これを繰り返すのはDRYじゃないよね?
- ActionController::Routing::Routes.draw{|map| map.resource "/controller/:id" }という宣言をすると、HTTPの各メソッドによって"/controller"を叩くことでCRUDのお好きな操作をば。
UIE Japan Developer Blog: 日本Rubyカンファレンス2006レポート (2006/06/11)よりREST
HTTPメソッドだけでCRUDできるよね。複数個所に分かれているのはDRYじゃないし、POST /peopleform_forでmethodを定義 ブラウザのformでputやdeleteできないのでmethodはhiddenで渡す (javascriptで~~と言いかけて訂正していたのでjsのputやdeleteも使うようになるのかも) また、CRUDはゴールでなくゴールを目指す肝であり設計の技法ですよ。
GET /people/1
PUT /people/1
DELETE /people/1
このへんから推察するに、Simply RESTfulプラグイン、RESTful Railsプラグインの機能(に近いもの)を標準に取り込むということでは?
Simply RESTfulプラグイン
routes.rbにmap.resourceというメソッドを追加。map.resource :item
と書くと以下のようなルーティングが生成される。
VERB | URL structure | Rails method |
---|---|---|
Display | ||
GET | /items | index |
GET | /items/1 | show |
Create | ||
GET | /items/new | new |
POST | /items | create |
Remove | ||
DELETE | /items/1 | destroy |
POST | /items/1?_method=DELETE | destroy (synonym) |
Update | ||
GET | /items/1;edit | edit |
PUT | /items/1 | update |
POST | /items/1?_method=PUT | update (synonym) |
POST | /items/1;complete | complete |
これはDHHの言ってるルールと符合する。
RESTful Railsプラグイン
routes.rbにmap.connect_resourceというメソッドを追加。map.connect_resource :item と書くと以下のようなルーティングが生成される。
URL structure | Rails method |
---|---|
/item | new |
/items | collection |
/items/1 | by_id |
さらにコントローラに
resource :collection do |r|
conditions << @books = Book.find(:all)
r.post do
...
end
end
resource :by_id do |r|
r.put do
...
end
r.delete do
...
end
end
などと書いて処理を行う。
その他条件リクエスト処理機能(リクエストされたリソースが更新されていなければ304 Not Modifiedを返すなど)など。詳しい使い方はXML.com: Putting REST on Rails参照。
その2へつづく。
トラックバック
このエントリーのトラックバックURL:
http://www.4bit.net/x/mt/mt-tb.cgi/124