Hatena::ブログ(Diary)

Yet Another Hackadelic

2009-01-24

Catalyst::Controller::Resources でオーバーロード POST を使いたい

id:ikasam_a にわがまま言ったら Catalyst::Request::REST::ForBrowsers ってのを教えて貰ったよ。

オーバーロード POST って何だよって方は、

とか読むと幸せになれると思います。

使い方

MyApp にて、こんな感じにしときます。

package MyApp;

use strict;
use warnings;

use Catalyst::Runtime '5.70';
use Catalyst::Request::REST::ForBrowsers;

### 中略

__PACKAGE__->request_class('Catalyst::Request::REST::ForBrowsers');

みたいな感じ。そうすると Catalyst::Request の代わりに Catalyst::Request::REST::ForBrowsers が使われるようになります。

んでもって、html 中で、

<form action="[% c.uri_for('/path/to') | html %]" method="post">
  <input type="hidden" name="x-tunneled-method" value="delete" />
  <input type="submit" name="submit" value="delete" />
</form>

みたいにやっとくと、Catalyst::Controller::Resources の destroy にうまく dispatch してくれます。

蛇足 - looks_like_browser

C::R::REST::ForBrowsers だけど、looks_like_browser メソッドも同時に提供してくれてて、これはブラウザの画面上から普通にリクエストした物なのか、XHR 経由 *1 なのかを判定してくれるみたいです。

SEE ALSO

*1:x-requested-with リクエストヘッダの値を見てる

2008-06-17

第3回 RESTful Webサービス読書会の感想など

みんな REST 好きなんですねぇと言うのが良く分かった第3回の読書会。僕の方は前日夜からプレゼンを書き出して、自分が発表する10分前にやっと完成したと言う体たらくぶり><

8.8節に関して

キュー、一括処理、トランザクションなどの考え方の例が示されている8章でも最も突っ込みどころの多い所。リソースの適用する考え方としては十分楽しいけど、だいぶ無理してるのでこれはベストプラクティスと呼ぶには筆者の信念に偏り過ぎてると思った。

また一括処理の指定の際に例えば、/resource1, /resource2/subres1 みたいな二つのリソースに対して統一インターフェースで何かする場合、/sets/resouce1;resouce2/subres1 のように指定するんだけど、これってURI Template を使えば、その記述の仕方で対象となるリソースを指定する事が出来るから SQL で言う所の where 句のような使い方が出来なくは無いよねと。

URI Template各言語実装は、同僚の id:n_shuyo さんがまとめて下さってます。GJすぐる。

Assertion の為の PUT の件

すでに id:IwamotoTakashi さんが指摘してます。

これってあの石橋叩いてリクエストって奴かな。Expect ヘッダ付きでエンティティボディが空の PUT をすると、サーバー側はそれが来ると言う前提で待つみたいな。

迷ったら〜

のフレーズ忘れてた。迷ったらリソースは理想論。もちろん追いかけてもいいし、追わなくてもいい。

リソースで考えてみて、ないなーと思ったらオーバーロードPOSTで。つまり「迷ったらオーバーロードPOST」がベストプラクティスなんジャマイカ。

それを言ったら台無しな気がしないでも無いけど、REST の良さはシンプルさであって、統一メソッドに収まらない概念がある事に対して、

  • それをリソースと扱うのか
  • あるいは既存のリソースへのROAに収まらないインターフェースと見るか

のいずれかのアプローチになるかと思えば、そういう結論に自ずとなるのかなと。

と言う訳で

REST にちょっと興味あるーって人は次回から来るといいと思います。今後は Google Group にて議論もやってくようです。

他の人の感想

見つかった範囲内ですけど。

2008-06-15

RESTful Web サービス読書会の資料公開

取り急ぎ資料だけうpしまーす。感想はまた後日><

でも一言だけ言えば、みんなデレっぷりが酷い件。