BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース JRubyとJerseyによるRubyのRESTfulサービス

JRubyとJerseyによるRubyのRESTfulサービス

原文(投稿日:2010/06/02)へのリンク

Rubyの表現力とJavaのRESTフレームワークを足し合わせるため、Charles Nutter氏はJRubyとRailsを使ってRESTfulサービスを構築した。彼はまず、RESTfulアプリケーションを構築しているRubyやRailsのコミュニティを調査した。

[…] RubyistたちはRESTfulな世界を先導してきました。彼らが書いたコードはそのほとんどがRESTfulです。RailsはRESTを中心に構築されており、ほとんどのコントローラはRESTfulなインターフェースになっています。さらにRailsは、アプリケーションから、RESTfulなWebサービスの透過的呼び出しを補助するツールも提供しています。もしRESTfulなWebサービスや典型的なRubyアプリケーションを開発しているのなら、Railsをお勧めします。

Charles氏は、JRubyのRESTfulサービス構築能力を示すため、JavaでRESTfulサービスを構築するためのライブラリやフレームワークといったソリューションの調査を行い、手始めに、標準JAX-RS APIを使ってシンプルなサンプルサービスを構築した。

JerseyのGetting StartedのチュートリアルをRubyで実装しました(今回はMavenは使っていませんが)。私が作ったHelloWorldResourceは、このようなコードです。

require 'java'java_import 'javax.ws.rs.Path'
java_import 'javax.ws.rs.GET'
java_import 'javax.ws.rs.Produces'

java_package 'com.headius.demo.jersey'
java_annotation 'Path("/helloworld")'
class HelloWorld
java_annotation 'GET'
java_annotation 'Produces("text/plain")'
def cliched_message
"Hello World"
end
end

Rubyクラスのコンパイルやオブジェクトのインメモリ表現について、彼は次のように説明している。

内部的には、このクラスは我々が書いたrestful_service.rbファイルのソースコードをロードし、RubyとJavaの両方からHelloWorldクラスとして見えるようになります。メソッド呼び出しはRubyコードにディスパッチする、コンストラクタはinitializeにディスパッチする、といった具合に動作します。このクラスは、本当にRubyとJava、両方の世界に存在しているのです。
サービスができたので、次はそれを起動するためのサーバスクリプトが必要です。

次に、サンプルを実行するための、正しいCLASSPATHの設定について説明している。

私は次のjarを環境変数CLASSPATHに追加しました(必ずしも環境変数に追加する必要はありませんが)

jersey-core-1.2.jar
jersey-server-1.2.jar
jsr311-api-1.1.1.jar
asm-3.1.jar
grizzly-servlet-webserver-1.9.9.jar

上の4つのjarファイルはJerseyアーカイブダウンロードから、最後のjarファイルはここからダウンロードすることができます。

Charles氏は、“JRubyで試してみたアノテーションベースAPIのサンプルはありますか?”という呼びかけで締めくくっている。オリジナルの記事で、JRubyでのRESTfulサービスの書き方の詳細を参照し、フォーラムで面白いサンプルを共有して欲しい。

この記事に星をつける

おすすめ度
スタイル

BT