はじめにいつもの
まず,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は,
HelloAplicationは,Applicationを拡張している.
さらにmainメソッドでは,Componentというクラスを作成している.
restletには,複数の仮想ホストを設定でき,各仮想ホストにアプリケーションを設定でき,各アプリケーションにはRouterによって要求に応じて振り分けられる複数のリソースがある.
この辺りの構成については追い追い記述していきたい.
とにかく今のポイントは,Componentにいろいろ設定して,なんやかんやでResourceと結びつけて起動したらResourceのRepresentationが返って来るということ.
Representation represent(Variant variant)というメソッドを持つ. RESTはRepresentational State Transferというくらいなので,restletはこのメソッドを実装してRepresentationを返すアプリケーションと言ってしまってもよいかもしれない(※). 今回は単純に文字列を出力するようにした. 次にHelloApplication.
※ ServletならHttpServletResponse,restletならRepresentationという対比だろうか.
Resourceでは,要求URLやリクエストパラメータ(URLクエリ)を取得して,内容に応じて処理を行う必要が多いかと思う.
そこで,要求URLやリクエストパラメータを取得するサンプルを作成してみた.
サンプルはやはり二つのクラスからなる.
まずParamResource.
Resourceクラスの親クラスのHandlerには,リクエストやコンテキストなど,さまざまな情報が格納されており,getterで取得できる.
例えば以下は,リクスト情報を取得して,その中のリクエストURLを取得している.
ただし,リソースの割り当てパスとして今回は/paramを指定した.
getRequest().getOriginalRef()ApplicationはHello版とほぼ同じ.
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に変換して返して来る.

