2006-02-28

REST:Restletについて

REST:RESTとは(1)でJavaServletのAPIの範疇でRESTが可能であることをちらっと書いたが、RESTのためのフレームワークも存在する。それが「Restlet」(このフレームワーク名を表すときは以降括弧付きで表現し、括弧が無い場合は一般名詞としてのRestletのこと)である。
今日(2006-02-28)現在の最新バージョンは1.0 beta3。Restlet APIとその参照実装 Noelios Restlet Engine(NRE)の二つで構成されている。

これが、もうちょっと簡単に出来なかったのかな~と思うぐらい何やら複雑っぽいので、とりあえずチュートリアルあたりを読んで、わかったことから書きつらねていきたい。チュートリアル本文と合わせて読んでもらえば、多少の手助けになるかもしれない。

1. Registering the Restlet implementation
NREを使っている限りは不要な話。NRE以外に今のところRestlet APIに対応したRestlet Engine(?)は存在しないのでパス。

2. Retrieving the content of a Web page
Restletはサーバフレームワークであり、クライアントフレームワークでもある。この章ではクライアントフレームワークとしての使い方のサワリが書かれている。

3. Listening to Web browsers
今度は、サーバ側実装のサワリ。AbstractHandlerを継承して、handleメソッドをオーバライド。doGet/Post/Delete/Putのようなメソッドは無いようなので、引数のUniformCallからMethodを取得して、GET/POST/DELETE/PUTを切り換える必要がありそう。それぐらいラッピングしてほしい。
しかも、NREをサーバとして起動しておいて、ハンドラをその上で動かすのではなく、単独のアプリとして作成し、中でHTTPServerを起動するようだ。

4. Overview of a REST architecture
RestletはHTTP以外にもPOPやSMTPでも運用できるようになっているようだ。そんなことより機能を絞って、簡単な仕組みにして欲しいものだ。

5. Restlets servers and containers
3章ではHTTPServerに直接ハンドラを適用していたが、ここではRestletContainerを作成し、コンテナとサーバを結びつけ、コンテナ上にRestletを登録する形をとっている。Restletはやはりハンドラと作り方が同じ(というかハンドラの一種)、振り分けは自分でやる必要がある。

6. Serving static files
静的コンテンツの公開の仕方。Apacheの設定ファイルでやるようなことを、コードに書いている。この手の事は設定ファイルでやらせてくれないかな。(コンテナへのRestletの登録もそうだが)

7. Chainlets and call logging
ChainletとはServlet APIで言うところのFilterのようなハンドラである。ここではLog出力をしてくれるChainletの使い方を紹介している。
こんなところに力を入れるぐらいなら、HTTPメソッドのラッパーを作ってくれよ。

8. Displaying error pages
エラーステータスページをカスタマイズするためのChainletを紹介。
だからこんな(ry

9. Guarding access to sensitive resources
クッキーに入っているユーザIDなどを利用して認証するためのChainlet。
って、クッキー使ったらRESTfulじゃ無くなるんじゃないの?

10. URI rewriting and redirection
URIのリライト、リダイレクトのやり方。リダイレクト専用のRestletが用意されている。パラメータを自動的にリダイレクト先のURIに変換する仕組みが備わっている。
だからこ(ry

11. Maplets and hierarchical URIs
リソースパスへのハンドラの割り付けをおこなうMapletというハンドラの使い方。実際のディレクトリ構造と異なるような階層でファイルを見せたり、DB上の情報をリソースとして見せることが出来るってところ。
ちょっとこれは便利そう。

12. Conclusion
クラス階層の図。

感想。使えなそう。というか、作者はRESTを勘違いしてるんじゃないか?
もっとイージーにRESTfulなWebアプリを作るためのJavaフレームワークを探すか。いっそ作るか?

0 件のコメント: