RESTful Web サービスについて
REST (REpresentational State Transfer) は、World Wide Web などの分散ハイパーメディアシステム用アーキテクチャースタイルです。RESTful アーキテクチャーで中心となるのは、URI (Universal
Resource Identifier) によって識別されるリソースという概念です。これらのリソースは HTTP などの標準インタフェースを使用して操作できます。また情報は、これらのリソースの表現を使用して交換されます。このチュートリアルでは、最初に REST について少し学習したあと、NetBeans IDE 6.1 がこのアーキテクチャー型をサポートする方法について説明します。
目次
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
Tomcat および GlassFish は、どちらも NetBeans IDE の Web および Java EE の配布とともにインストールできます。または、GlassFish のダウンロードページ または Apache Tomcat のダウンロードページ からダウンロードすることもできます。
はじめに
RESTful Web サービスは、RESTful アーキテクチャースタイルを使用して構築されたサービスです。RESTful アプローチを使用する Web サービスの構築は、インターネット上にサービスを配備するために、SOAP ベースのテクノロジを使用する代わりとして幅広く利用されています。これは、軽量かつ HTTP 経由でデータを直接送信できるためです。
IDE は、JAX-RS (JSR 311 - Java API for RESTful Web Services) および Jersey (JAX-RS のリファレンス実装) を使用する、RESTful Web サービスの迅速な開発をサポートしています。
詳細については、次を参照してください。
RESTful Web サービスの構築に加え、IDE は RESTful Web サービスにアクセスするクライアントアプリケーションの構築、テスト、および Web サービスを呼び出すコードの生成 (RESTful と SOAP ベースの両方) もサポートしています。
IDE が提供する RESTful 機能の一覧は次のとおりです。
JPA エンティティークラスおよびパターンからの RESTful Web サービスの迅速な作成。
RESTful コンポーネントパレットからコンポーネントをドラッグ&ドロップすることによる、Google マップ、Yahoo News Search、StrikeIron Web サービスなどの Web サービスを呼び出すコードの迅速な生成。
RESTful クライアントアプリケーションの構築用 RESTful Web サービスからの JavaScript クライアントのスタブの生成。
RESTful Web サービスのテスト用テストクライアントの生成。
プロジェクト内の RESTful Web サービスの実装クラスを簡単にナビゲートする論理ビュー。
このチュートリアルでは、RESTful Web サービスを生成、実装、およびテストする際、IDE がどのようなサポートを提供するのかを説明します。
データベースからのエンティティークラスの生成
この課題の目標は、プロジェクトを作成し、データベースからエンティティークラスを生成することです。
「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」で「Web」を選択します。「プロジェクト」で「Web アプリケーション」を選択して、「次へ」をクリックします。
「プロジェクト名」に「CustomerDB 」と入力します。
「サーバー」で GlassFish を選択します。残りのオプションもクリックして進み、「完了」をクリックします。
「サービス」タブを開きます。「データベース」で、「Java DB」を右クリックして起動します。
「CustomerDB 」ノードを右クリックし、「新規」>「データベースからのエンティティークラス」を選択します。または、「新規ファイル」ウィザード (Ctrl-N) にある「持続性」カテゴリから選択することも可能です。
「データベース表」パネルで、「データソース」ドロップダウンリストから「jdbc/sample 」データソースを選択します。
注: Tomcat では、このデータベースが存在しない場合があります。その場合、「データソース」ドロップダウンフィールドから「新規データソース」を選択します。「データソースを作成」ダイアログが開きます。「JNDI 名」フィールドに「jdbc/sample」と入力します。「データベース接続」ドロップダウンフィールドから「jdbc:derby://ホスト名:1527/sample [APP の app]」を選択します。「了解」をクリックします。ダイアログが閉じ、「データベース表」パネルに戻ります。NetBeans IDE 6.0 用の Tomcat での RESTful サービスのチュートリアル も参照してください。
「使用可能な表」で「CUSTOMER」を選択し、「追加」をクリックします。CUSTOMER テーブルと関連のある DISCOUNT_CODE テーブルが自動的に「選択した表」に追加されます。画面は次のようになります。
「次へ」をクリックします。
「パッケージ」で「customerdb 」と入力します。画面は次のようになります。
「持続性ユニットの作成」をクリックします。次のダイアログが表示されます。
「作成」をクリックし、「完了」をクリックします。
「プロジェクト」ウィンドウを表示します。画面は次のようになります。
エンティティークラスからの RESTful Web サービスの生成
この課題の目標は、前の節で生成したエンティティークラスから RESTful Web サービスを生成することです。
エンティティークラスを格納しているパッケージを右クリックし、「新規」>「エンティティークラスからの RESTful Web サービス」を選択します。
「新規 エンティティークラスからの RESTful Web サービス」ウィザードで、「すべてを追加」をクリックします。「選択されているエンティティークラス」フィールドにエンティティークラスが表示されたら、「次へ」をクリックします。
次に示すように、次のパネルはデフォルトのままにします。
IDE で生成される項目がすべて表示されます。IDE はコンテナと項目というパターンでリソースクラスを生成します。たとえば Customer エンティティークラスの場合、IDE は CustomersResource というコンテナリソースと、CustomerResource という項目リソースを生成します。また、CustomersConverter および CustomerConverter など対応のエンティティーインスタンスからリソース表現を生成する目的で、IDE は各リソースクラスについてコンバータクラスを生成します。さらに、関連を表現するために、CustomerRefConverter などの、参照コンバータと呼ばれる追加のコンバータクラスがあります。
「完了」をクリックします。
「プロジェクト」ウィンドウを表示します。次のように表示されているはずです。
「プロジェクト」ウィンドウの「RESTful Web サービス」ノードに、プロジェクトのすべての RESTful Web サービスが表示されます。[/customers/] など、角カッコ内の値は URI テンプレートの値です。このノードをダブルクリックしてもソースファイルに移動できます。このビューではすべての HTTP メソッドとサブリソースロケータメソッドも表示されます。この場合でも、ノードをダブルクリックすることでメソッドに移動できます。
ここまででエンティティークラスと RESTful Web サービスが生成されたので、アプリケーションのテストを始めましょう。IDE には RESTful Web サービスのテストに便利なユーティリティーが備わっています。次の節でこれを利用します。
RESTful Web サービスのテスト
この課題の目標は、アプリケーションを試してみることです。
プロジェクトのノードを右クリックし、「RESTful Web サービスをテスト」を選択します。サーバーが起動し、アプリケーションが配備されます。配備が完了すると、それぞれの Web サービスへのリンク付きで、ブラウザにアプリケーションが表示されます。
左側にルートリソースの組があります。ここでは、customers と discountCodes という名前が付いています。
まず「customers 」などのルートリソースを選択します。メソッドのドロップダウンリストをクリックし、「GET(application/xml) 」または「GET(application/json) 」を選択します。「テスト」をクリックします。結果が「テスト出力」セクションに表示されます。
「テスト出力」セクションには 4 つのタブがあります。「表形式ビュー」は出力結果のドキュメントにあるすべての URI を表示するフラットなビューで、リンクをクリックすることで移動できます。「raw データのビュー」は実際に戻ってきたデータを表示します。選択した MIME タイプ (application/xml または application/json ) により、表示されるデータはそれぞれ XML または 形式です。「ヘッダー」タブは HTTP ヘッダー情報を表示します。「HTTP モニター」というタブもあり、実際に送受信された HTTP 要求および応答を表示します。
ブラウザを閉じ、IDE に戻ります。
Google マップ機能の追加
この課題の目標は、Google マップの機能を RESTful Web サービスに追加することです。
エディタで CustomerResource クラスを開きます。
CustomerResource に次のメソッドを追加します。
@GET
@ProduceMime("text/html")
public String getGoogleMap() {
// GoogleMap 操作をここにドラッグ&ドロップ
return "";
}
//ブラウザに移動して任意のカスタマ (/customers/1/googleMap など) にアクセスして起動する
/**
* Returns sub-resource.
*/
@Path("googleMap/")
@GET
@ProduceMime("text/html")
public String getGoogleMapResource() {
return getGoogleMap();
}
http://www.google.com/apis/maps/signup.html で Google マップのキーにサインアップします。Google マップのキー要求ダイアログには、ユーザーの Web サイトの URL を入力するフィールドがあります。このフィールドに「http://localhost:8080 」と入力します。
IDE で「サービス」タブを開き、「Web サービス」ノードを展開します。「Web サービス」で「Google」を展開します。「Google」で「Map Service」を展開します。
getGoogleMap 項目をドラッグして、手順 2 で作成した getGoogleMap メソッドの return = null; 行の直前にドロップします。「getGoogleMap SaaS サービスのカスタマイズ」ダイアログが開きます。デフォルト値のままにして、「了解」をクリックします。
IDE によって、次の try ブロックが CustomerResource クラスのgetGoogleMap メソッドに追加されます。
@Path("googleMap/")
@GET
@ProduceMime("text/html")
public String getGoogleMap() {
try {
String address = "16 Network Circle, Menlo Park";
java.lang.Integer zoom = 15;
String iframe = "false";
RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);
//TODO - Uncomment the print Statement below to print result.
//System.out.println("The SaasService returned: "+result.getDataAsString());
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
また、次のクラスとリソースがプロジェクトに作成されます。
RestConnection : HttpUrlConnection を囲むラッパー
RestResponse : HTTP 応答用のラッパー
GoogleMapServiceAuthenticator : googlemapserviceauthenticator.properties から ApiKey の値を取得するクラス
googlemapserviceauthenticator.properties : API キーを格納するプロパティーファイル
GoogleMapService : ラッパーメソッドを含むサービスラッパー。RestConnection を使用して Google マップサービスを呼び出します。
getGoogleMap メソッドの try ブロックを、次の内容に置き換えます。
@Path("googleMap/")
@GET
@ProduceMime("text/html")
public String getGoogleMap() {
try {
Customer c = getEntity();
String address = c.getAddressline1() + " " + c.getAddressline2() + " " +
c.getCity() + " " + c.getState() + " " + c.getZip();
java.lang.Integer zoom = 15;
String iframe = "false";
RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);
return result.getDataAsString();
//TODO - 結果を出力するには次の print 文のコメントを解除。
//System.out.println("The SaasService returned: "+result.getDataAsString());
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}
googlemapserviceauthenticator.properties を開きます。手順 3 の Google から取得した API key と「api_key」プロパティーを等しくします。
「サービス」タブを開いてアプリケーションサーバーを起動します。
CustomerDB project ノードを右クリックし、「RESTful Web サービスをテスト」を選択します。IDE によってプロジェクトがサーバーから配備解除および再配備され、テストクライアントでブラウザウィンドウに表示されます。
左サイドバーの「customers 」を選択します。customers のテスト条件が主区画に表示されます。デフォルトのまま、「テスト」をクリックします。customers の表が開きます。
表から customer1 などの顧客を 1 人選択します。顧客をクリックします。その顧客のテスト条件が主区画に表示されます。ドロップダウンメニューから、text/html MIME タイプを選択します。「テスト」をクリックします。その住所の Google マップが raw データのビューで表示されます。
注: Google マップが住所を検索できない場合、海を拡大表示します。
URL を http://localhost:8081/CustomerDB/resources/customers/2/googleMap 、.../3/googleMap など、25 までに置き換えると、すべての顧客の地図上の位置を確認できます。
関連項目
NetBeans IDE 6.0 を使用した Java EE アプリケーションの開発方法についての詳細は、次のリソースを参照してください。
nbj2ee
@
netbeans.org
メーリングリスト に登録することによって、NetBeans IDE Java EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。