corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

RESTful Web サービスについて

REST (REpresentational State Transfer) は、World Wide Web などの分散ハイパーメディアシステム用アーキテクチャースタイルです。RESTful アーキテクチャーで中心となるのは、URI (Universal Resource Identifier) によって識別されるリソースという概念です。これらのリソースは HTTP などの標準インタフェースを使用して操作できます。また情報は、これらのリソースの表現を使用して交換されます。このチュートリアルでは、最初に REST について少し学習したあと、NetBeans IDE 6.1 がこのアーキテクチャー型をサポートする方法について説明します。

目次

このページの内容は NetBeans IDE 6.1 が対象です

このチュートリアルに従うには、次のソフトウェアとリソースが必要です。

ソフトウェアまたはリソース 必須バージョン
NetBeans IDE Web および Java EE の version 6.1
Java Development Kit (JDK) version 6 または
version 5
Java EE 互換の Web サーバーまたはアプリケーションサーバー Tomcat Web サーバー 6.0 および/または GlassFish アプリケーションサーバー v2
重要: このチュートリアルで Tomcat を使用する場合は次を参照してください。
REST による Tomcat に関する NetBeans の Wiki

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 機能の一覧は次のとおりです。

  1. JPA エンティティークラスおよびパターンからの RESTful Web サービスの迅速な作成。
  2. RESTful コンポーネントパレットからコンポーネントをドラッグ&ドロップすることによる、Google マップ、Yahoo News Search、StrikeIron Web サービスなどの Web サービスを呼び出すコードの迅速な生成。
  3. RESTful クライアントアプリケーションの構築用 RESTful Web サービスからの JavaScript クライアントのスタブの生成。
  4. RESTful Web サービスのテスト用テストクライアントの生成。
  5. プロジェクト内の RESTful Web サービスの実装クラスを簡単にナビゲートする論理ビュー。

このチュートリアルでは、RESTful Web サービスを生成、実装、およびテストする際、IDE がどのようなサポートを提供するのかを説明します。

データベースからのエンティティークラスの生成

この課題の目標は、プロジェクトを作成し、データベースからエンティティークラスを生成することです。

  1. 「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」で「Web」を選択します。「プロジェクト」で「Web アプリケーション」を選択して、「次へ」をクリックします。
  2. 「プロジェクト名」に「CustomerDB」と入力します。
  3. 「サーバー」で GlassFish を選択します。残りのオプションもクリックして進み、「完了」をクリックします。
  4. 「サービス」タブを開きます。「データベース」で、「Java DB」を右クリックして起動します。
  5. CustomerDB」ノードを右クリックし、「新規」>「データベースからのエンティティークラス」を選択します。または、「新規ファイル」ウィザード (Ctrl-N) にある「持続性」カテゴリから選択することも可能です。
  6. 「データベース表」パネルで、「データソース」ドロップダウンリストから「jdbc/sample」データソースを選択します。

    注: Tomcat では、このデータベースが存在しない場合があります。その場合、「データソース」ドロップダウンフィールドから「新規データソース」を選択します。「データソースを作成」ダイアログが開きます。「JNDI 名」フィールドに「jdbc/sample」と入力します。「データベース接続」ドロップダウンフィールドから「jdbc:derby://ホスト名:1527/sample [APP の app]」を選択します。「了解」をクリックします。ダイアログが閉じ、「データベース表」パネルに戻ります。NetBeans IDE 6.0 用の Tomcat での RESTful サービスのチュートリアルも参照してください。

  7. 「使用可能な表」で「CUSTOMER」を選択し、「追加」をクリックします。CUSTOMER テーブルと関連のある DISCOUNT_CODE テーブルが自動的に「選択した表」に追加されます。画面は次のようになります。

    「新規 データベースからのエンティティークラス」の「データベース表」パネル、CUSTOMER および DISCOUNT_CODE 表を選択

    「次へ」をクリックします。

  8. 「パッケージ」で「customerdb」と入力します。画面は次のようになります。
    「新規 データベースからのエンティティークラス」の「エンティティークラス」パネル、パッケージ名を表示
  9. 「持続性ユニットの作成」をクリックします。次のダイアログが表示されます。
    「新規 データベースからのエンティティークラス」から「持続性ユニット」ダイアログを作成

    「作成」をクリックし、「完了」をクリックします。

  10. 「プロジェクト」ウィンドウを表示します。画面は次のようになります。
    新規エンティティークラスを表示している「プロジェクト」ビュー

エンティティークラスからの RESTful Web サービスの生成

この課題の目標は、前の節で生成したエンティティークラスから RESTful Web サービスを生成することです。

  1. エンティティークラスを格納しているパッケージを右クリックし、「新規」>「エンティティークラスからの RESTful Web サービス」を選択します。
  2. 「新規 エンティティークラスからの RESTful Web サービス」ウィザードで、「すべてを追加」をクリックします。「選択されているエンティティークラス」フィールドにエンティティークラスが表示されたら、「次へ」をクリックします。
  3. 次に示すように、次のパネルはデフォルトのままにします。
    「新規 エンティティークラス からの RESTful Web サービス」に表示された生成したクラス

    IDE で生成される項目がすべて表示されます。IDE はコンテナと項目というパターンでリソースクラスを生成します。たとえば Customer エンティティークラスの場合、IDE は CustomersResource というコンテナリソースと、CustomerResource という項目リソースを生成します。また、CustomersConverter および CustomerConverter など対応のエンティティーインスタンスからリソース表現を生成する目的で、IDE は各リソースクラスについてコンバータクラスを生成します。さらに、関連を表現するために、CustomerRefConverter などの、参照コンバータと呼ばれる追加のコンバータクラスがあります。

    「完了」をクリックします。

  4. 「プロジェクト」ウィンドウを表示します。次のように表示されているはずです。
    生成された RESTful Web サービスクラスを表示している「プロジェクト」ビュー
  5. 「プロジェクト」ウィンドウの「RESTful Web サービス」ノードに、プロジェクトのすべての RESTful Web サービスが表示されます。[/customers/] など、角カッコ内の値は URI テンプレートの値です。このノードをダブルクリックしてもソースファイルに移動できます。このビューではすべての HTTP メソッドとサブリソースロケータメソッドも表示されます。この場合でも、ノードをダブルクリックすることでメソッドに移動できます。

ここまででエンティティークラスと RESTful Web サービスが生成されたので、アプリケーションのテストを始めましょう。IDE には RESTful Web サービスのテストに便利なユーティリティーが備わっています。次の節でこれを利用します。

RESTful Web サービスのテスト

この課題の目標は、アプリケーションを試してみることです。

  1. プロジェクトのノードを右クリックし、「RESTful Web サービスをテスト」を選択します。サーバーが起動し、アプリケーションが配備されます。配備が完了すると、それぞれの Web サービスへのリンク付きで、ブラウザにアプリケーションが表示されます。
    ブラウザでの RESTful Web サービステスターの開始ページ
  2. 左側にルートリソースの組があります。ここでは、customersdiscountCodes という名前が付いています。

  3. まず「customers」などのルートリソースを選択します。メソッドのドロップダウンリストをクリックし、「GET(application/xml)」または「GET(application/json)」を選択します。「テスト」をクリックします。結果が「テスト出力」セクションに表示されます。
    データベースからのカスタマの一覧を表示した RESTful Web サービステスターの出力
  4. 「テスト出力」セクションには 4 つのタブがあります。「表形式ビュー」は出力結果のドキュメントにあるすべての URI を表示するフラットなビューで、リンクをクリックすることで移動できます。「raw データのビュー」は実際に戻ってきたデータを表示します。選択した MIME タイプ (application/xml または application/json) により、表示されるデータはそれぞれ XML または 形式です。「ヘッダー」タブは HTTP ヘッダー情報を表示します。「HTTP モニター」というタブもあり、実際に送受信された HTTP 要求および応答を表示します。

  5. ブラウザを閉じ、IDE に戻ります。

Google マップ機能の追加

この課題の目標は、Google マップの機能を RESTful Web サービスに追加することです。

  1. エディタで CustomerResource クラスを開きます。
  2. 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();
    }
  3. http://www.google.com/apis/maps/signup.html で Google マップのキーにサインアップします。Google マップのキー要求ダイアログには、ユーザーの Web サイトの URL を入力するフィールドがあります。このフィールドに「http://localhost:8080」と入力します。
  4. IDE で「サービス」タブを開き、「Web サービス」ノードを展開します。「Web サービス」で「Google」を展開します。「Google」で「Map Service」を展開します。

    Google のマップサービスを表示したサービスビュー
  5. 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 マップサービスを呼び出します。

  6. 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 "";
    }
  7. googlemapserviceauthenticator.properties を開きます。手順 3 の Google から取得した API key と「api_key」プロパティーを等しくします。
  8. 「サービス」タブを開いてアプリケーションサーバーを起動します。
  9. CustomerDB project ノードを右クリックし、「RESTful Web サービスをテスト」を選択します。IDE によってプロジェクトがサーバーから配備解除および再配備され、テストクライアントでブラウザウィンドウに表示されます。
  10. 左サイドバーの「customers」を選択します。customers のテスト条件が主区画に表示されます。デフォルトのまま、「テスト」をクリックします。customers の表が開きます。
  11. 表から customer1 などの顧客を 1 人選択します。顧客をクリックします。その顧客のテスト条件が主区画に表示されます。ドロップダウンメニューから、text/html MIME タイプを選択します。「テスト」をクリックします。その住所の Google マップが raw データのビューで表示されます。

    注: Google マップが住所を検索できない場合、海を拡大表示します。


    データベースの顧客の住所を示した Google マップ

  12. URL を http://localhost:8081/CustomerDB/resources/customers/2/googleMap.../3/googleMap など、25 までに置き換えると、すべての顧客の地図上の位置を確認できます。


関連項目

NetBeans IDE 6.0 を使用した Java EE アプリケーションの開発方法についての詳細は、次のリソースを参照してください。

メーリングリスト に登録することによって、NetBeans IDE Java EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。

Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems