ファイヤープロジェクト
はじめにいつもの
2008-11-28T22:30+09:00   matsu
まず,Restletについて簡単に調査したあと,入門の手始めとして例によってHelloしてみる.
RESTはWebサービスアプリケーションの一つのスタイルで,しばしばSOAPと対比される. 「Web 2.0時代のWebServices 〜SOAP/REST使い分けの指針」にいろいろ詳しく書いてある. Restletは,RESTアプリケーションを作成するための,Java用フレームワークである. 本家サイトではRESTエンジンなんて呼んだりもしているようだ. とにかくキーワードとしての"restlet"は,RESTアプリケーションで,JavaライブラリとしてのRestletは,RESTエンジン,という整理としておきたい. Restletには,いろいろと売りがあるようだが,ここでずらずら並べてもアレなので,以降で具体的に紹介していきたい.
やはり,とにかく動かしてみたいということで,Helloと表示するサーバサイドrestletを作成してみた. サンプルは,二つのクラス,HelloResourceとHelloApplicationからできている. おそらくこれが最も素朴なrestletの構成となる. まず,HelloResource.
HelloResourceは,Resouceを拡張している. RESTでは,URIで識別されるリソースにアクセスしましょうということで,そのリソースを表すのがResourceとその子クラスである. Resourceは,
Representation represent(Variant variant)
というメソッドを持つ. RESTはRepresentational State Transferというくらいなので,restletはこのメソッドを実装してRepresentationを返すアプリケーションと言ってしまってもよいかもしれない(※). 今回は単純に文字列を出力するようにした. 次にHelloApplication.
HelloAplicationは,Applicationを拡張している. さらにmainメソッドでは,Componentというクラスを作成している. restletには,複数の仮想ホストを設定でき,各仮想ホストにアプリケーションを設定でき,各アプリケーションにはRouterによって要求に応じて振り分けられる複数のリソースがある. この辺りの構成については追い追い記述していきたい. とにかく今のポイントは,Componentにいろいろ設定して,なんやかんやでResourceと結びつけて起動したらResourceのRepresentationが返って来るということ.
※ ServletならHttpServletResponse,restletならRepresentationという対比だろうか.
Resourceでは,要求URLやリクエストパラメータ(URLクエリ)を取得して,内容に応じて処理を行う必要が多いかと思う. そこで,要求URLやリクエストパラメータを取得するサンプルを作成してみた. サンプルはやはり二つのクラスからなる. まずParamResource.
Resourceクラスの親クラスのHandlerには,リクエストやコンテキストなど,さまざまな情報が格納されており,getterで取得できる. 例えば以下は,リクスト情報を取得して,その中のリクエストURLを取得している.
getRequest().getOriginalRef()
ApplicationはHello版とほぼ同じ.
ただし,リソースの割り当てパスとして今回は/paramを指定した.
router.attach("/param", ParamResource.class);
これによって,/paramにアクセスした場合にParamResourceが動く. デフォルトのリソースは設定していないので,/param以外へのアクセスはエラーとなる. パスは前方一致マッチングしていき,競合する場合は,BEST,FIRSTなどの方法を選択できるが,それはまた別に記述したい.
今回作成したサンプル(HelloApplicationとParamApplication). コンパイル,実行には,
org.restlet.jar
com.noelios.restlet.jar
が必要. この二つのjarは,restletをコンパイル,実行する場合にはいつも必要だと思う. HelloApplicationを起動したら,Webブラウザなどで http://localhosst:8182/paramにアクセスすると,リクエストURLと,サンプルリンクが表示される. サンプルリンクの例にしたがって,いろいろとURLクエリを加えてリクエストすると,クエリをHTML Formに変換して返して来る.
matsu(C)
Since 2002
Mail to matsu