Application Express 5.0でのRESTful Webサービスの作成および使用


オプション



始める前に

目的

このチュートリアルでは、Application Express 5.0でのRESTful Webサービスの作成およびアプリケーションを介したWebサービスへのアクセスについて学習します。また、Javaクライアントを使用したWebサービスの消費についても学習します。

所要時間

約40分。

概要

Webサービスは、プラットフォーム中立で言語非依存の環境でWebを介してアプリケーションが相互に対話できるようにします。一般的なWebサービスのシナリオでは、ビジネス・アプリケーションはHTTP経由でプロトコルを使用して特定のURLにあるサービスにリクエストを送信します。サービスはリクエストを受信し、それを処理してレスポンスを返します。通常、Webサービスは、Simple Object Access Protocol (SOAP)またはRepresentational State Transfer (REST)アーキテクチャに基づいています。RESTful Webサービスは結果指向です。WebサービスのスコープはURI内にあり、サービスのメソッドは、GET、POST、PUT、DELETEなど、使用されるHTTPメソッドによって記述されます。

RESTful Web Serviceウィザードは、RESTful Webサービスを宣言的に作成する際に役立つOracle Application Expressの「SQL Workshop」領域内の一連のページです。RESTful Webサービスを定義すると、一意のUniform Resource Identifier (URI)を使用してそれを呼び出すことができます。RESTful Webサービスは、Oracle APEX内でモジュール階層、リソース・テンプレートおよびテンプレート内のハンドラによって編成されます。リソース・テンプレートにはURIの接頭辞が含まれ、これに、ハンドラによって定義されるURIの最後の部分が付いて完成します。動的アクションの詳細は、『Oracle® Application Express SQLワークショップ・ガイド』のRESTfulサービスの使用に関する項を参照してください。

このチュートリアルでは、Oracle Application ExpressのSQLワークショップ・ツールを使用してRESTful Webサービスを宣言的に作成し、同じサービスを、アプリケーションの作成およびRESTful WebサービスへのWebサービス参照の追加によって消費する方法について学習します。RESTful WebサービスはJavaクライアントを使用する際にも消費されます。

このチュートリアルを実行する際、次のことを念頭に置いてください。

  • Oracle Application Expressワークスペースへのログイン: Oracle Application Expressワークスペースは、オンプレミスのOracle DatabaseまたはOracle Database Cloud Services内に存在する可能性があります。ログインの資格証明はワークスペースの場所によって異なります。
    • Oracle Database Cloud Service内のOracle Application Expressへのログイン:  Oracle Database Cloud ServiceのOracleヘルプ・センターを参照してください。これを行うには、Oracle Cloudヘルプ・センターにアクセスし、「Platform and Infrastructure」を選択します。ここで、使用しているDatabase Cloud Serviceを選択すると、「はじめに」ページが表示されます。
    • オンプレミスのOracle Application Expressへのログイン: ブラウザから、ワークスペース管理者によって提供されたOracle Application Expressワークスペースのオンプレミスのインストール場所に移動します。
  • アプリケーションID: このチュートリアルのスクリーンショットでは、アプリケーションIDはぼかして表示されています。ユーザーのアプリケーションIDは、アプリケーションの作成時に自動的に割り当てられる値になります。
  • スキーマ: Database Schema Service内のOracle Application Expressワークスペースにアクセスする場合、ユーザーごとに1つのスキーマが割り当てられます。このスキーマ名は変更できません。オンプレミスのOracleデータベースにアクセスする場合は、Oracle Application Expressインスタンス管理者によってワークスペースに1つ以上のスキーマが割り当てられることがあります。

前提条件

このチュートリアルを始める前に次の用意をする必要があります。

  • オンプレミスまたはDatabase Cloud Service内でOracle Database 11g以降のリリースにアクセスできる。
  • Oracle Application Expressリリース5.0をOracle Application Express (オンプレミス用のみ)で構成済のRESTfulサービスを含んだOracle Databaseにインストールする。
  • files.zipをダウンロードし、作業ディレクトリ内に解凍する。
  • 抽出されたファイルからCreate_Employees.sqlを実行し、必要なデータベース・オブジェクトを作成する。
  • Javaクライアントを使用するRESTful Webサービスを消費するためにJava Development Kit 6以降をインストールする。

RESTful Webサービスの作成

このトピックでは、SQLワークショップのRESTfulサービス・ツールを使用してRESTful Webサービスを作成します。RESTful Web Serviceウィザードは、新規のRESTful Webサービスを宣言的に作成する際に役立つSQLワークショップの一連のページです。RESTful Webサービスは、データベース内の特定のSQL文を呼び出します。

GETおよびPUTリソース・ハンドラを使用したRESTful Webサービスの作成

サンプルのGETおよびPUTサービス・ハンドラを使用して「Employees」表にRESTful Webサービスを作成するには、次の手順を実行します。

  1.  Oracle Application Expressの「Home」ページから「SQL Workshop」タブを選択し、「RESTful Services」を選択します。

    この図の説明
  2. 「Create >」をクリックします。

    この図の説明
  3. ページに、「RESTful Services Module」、「Resource Template」、「Resource Handler」という名前の3つのカテゴリにグループ化されたエントリが読み込まれます。「RESTful Services Module」で、「Name」にemployeesを入力し、さらに下方にスクロールします。

    この図の説明
  4. 「Resource Template」で、「URI Template」にemployees/を入力して自分のUniform Resource Identifier (URI)を特定し、さらに下方にスクロールします。

    この図の説明
  5. 「Resource Handler」で、「Method」に「GET」、「Source Type」に「Query」、「Format」に「CSV」を選択します。これにより、リソース・ハンドラによって使用されるHTTPメソッドが特定されます。
    「Source」に次のSQL問合せを入力し、「Create Module」をクリックします。

    select * from employees

    この図の説明
  6. 「GET」ハンドラが「employees/」の下に作成されます。そのプロパティを編集するには、「employees/」の下の「GET」をクリックします。

    この図の説明
  7. 「Requires Secure Access」に「No」を選択し、「Apply Changes」をクリックします。

    この図の説明
  8. RESTfulサービス・ハンドラの動作をテストするには、「Test」をクリックします。

    注意: 画面に「Test」ボタンが表示されない場合は、Oracle Application ExpressのインストールでRESTfulサービスが正しく構成されていることを確認してください。詳細は、「Oracle Application ExpressでのRESTfulサービスの構成手順」を参照してください。Database Cloud Serviceを使用している場合は、デフォルトでRESTfulサービスは構成されます。

    この図の説明
  9. ファイルを保存するように求められます。このファイルは後でCSVエディタを使用して表示できます。

    この図の説明
  10. CSV形式の結果セットが表示されます。

    この図の説明
  11. 次に、同じWebサービスでPOSTメソッドのハンドラを作成しましょう。「employees/」の下の「Create Handler」をクリックします。

    この図の説明
  12. 「Method」に「POST」、「Source Type」に「PL/SQL」を選択します。「MIME Types Allowed」にapplication/jsonを入力します。「Requires Secure Access」に「No」を選択します。「Source」に次のPL/SQLコードを入力し、「Create」をクリックします。

    declare
      id employees.employee_id%TYPE;
    begin
      id := employees_seq.nextval;

      insert into employees
      (employee_id,first_name, last_name, email, hire_date, job_id)
      values
      id, :first_name, :last_name, :email, to_date(:hire_date, 'DD-MM-YYYY'),
      :job_id);

      :employee_id := id;
    end;

    この図の説明
  13. ページを下方にスクロールし、「Create Parameter」をクリックして、新規作成されたemployeeのIDを返すハンドラにOUTパラメータを追加します。

    この図の説明
  14. 「Name」および「Bind Variable Name」にemployee_idを入力します。「Access Method」に「OUT」、「Source Type」に「HTTP Header」、「Parameter Type」に「String」を選択し、「Create」をクリックします。

    この図の説明
  15. OUTパラメータが作成されました。次のセクションでは、新規のテンプレートを作成し、バインド変数を使用して「Query One Row」に基づいてJSON結果セットを取得します。

    この図の説明

「Query One Row」を使用したリソース・ハンドラの作成

このセクションでは、「employee id」を指定して「employee」の詳細情報を提供するRESTfulサービスを作成します。結果はJSON形式で返されます。次の手順を実行します。

  1. 「Create Template」をクリックします。

    この図の説明
  2. 「URI Template」にemployees/{id}を入力し、「Create」をクリックします。

    この図の説明
  3. 「employees/{id}」の下の「Create Handler」をクリックします。

    この図の説明
  4. 「Method」に「GET」、「Source Type」に「Query One Row」、「Requires Secure Access」に「No」を選択します。
    「Source」に次のSQL問合せを入力し、「Create」をクリックします。

    select * from employees where employee_id = :id

    この図の説明
  5. さらに下方にスクロールし、「Create Parameter」をクリックして、「employee」のIDを受信するハンドラにINパラメータを追加します。

    この図の説明
  6. 「Name」および「Bind Variable Name」にidを入力します。「Access Method」に「IN」、「Source Type」に「HTTP Header」、「Parameter Type」に「String」を選択し、「Create」をクリックします。

    この図の説明
  7. 「Source Type」を変更します。「Parameters」の下で、「Name」の下の「id」リンクをクリックします。

    この図の説明
  8. 「Source Type」に「URI」を選択し、「Apply Changes」をクリックします。

    この図の説明
  9. このハンドラをテストする前に、バインド変数を設定して入力パラメータの値、idを渡します。「Set Bind Variables >」をクリックします。

    この図の説明
  10. 「:ID」に203を入力し、「Test」をクリックします。

    この図の説明
  11. 「employee_id = 203」の「employee」の完全な詳細が表示されます。

    この図の説明

「Employees」フィードを使用したリソース・ハンドラの作成

このセクションでは、フィード・ソース・タイプのRESTfulサービスを作成します。フィード結果はJSONとして表示されます。フィード内の各アイテムには、リソースのサマリーおよびリソースの完全表現へのハイパーリンクが含まれます。次の手順を実行します。

  1. 「Create Template」をクリックします。

    この図の説明
  2. 「URI Template」にemployeesfeed/を入力し、「Create」をクリックします。

    この図の説明
  3. 「employeesfeed/」の下の「Create Handler」をクリックします。

    この図の説明
  4. 「Method」に「GET」、「Source Type」に「Feed」、「Requires Secure Access」「No」を選択します。「Source」の下に次のSQL問合せを入力し、「Create」をクリックします。

    select employee_id, first_name
    from employees
    order by employee_id, first_name

    この図の説明
  5. 「employeesfeed/」の下の「GET」をクリックし、「Resource Handler Editor」を開きます。

    この図の説明
  6. ページを下方にスクロールし、「Test」をクリックします。

    この図の説明
  7. 結果はJSON形式で表示されます。各アイテムは、RESTfulサービスからのベースURIを含んだURIと、パラメータとして使用される「employee_id」の値で構成されます。「Feed」ソース・タイプの場合、最初の列は一意の識別子でなければならず、このRESTfulサービスが呼び出される際にハイパーリンクに変換されます。
    この例では「employee_id」は最初の列で、ハイパーリンクに変換されます。

    たとえば、次のスクリーンショットでは、employee_id = 100の「employee」のURIは次のようになりますhttps://databasetrial7477:anjani.db.us2.oraclecloudapps.com/apex/employeesfeed/100

    注意: この例に示されているURIは、このチュートリアルを実行するために使用されるデータベース・クラウド・サービスに固有のものであり、ユーザーのものとは異なる場合があります。また、URIの値も、このチュートリアルをオンプレミスか、クラウド・サービス上のどちらで実行しているかによって異なります。一般に、URI形式は次のようになります。

    オンプレミス http://localhost:<Port where ords is set up>/ords/<schema name>/<Resource Template Name>/<employee_id>

    例: http://localhost:9090/ords/apex/employeesfeed/100
    この場合、ordsはOracle APEXのインストール中にポート9090で設定されており、apexはスキーマ名、employeesfeedはリソース・テンプレート名、100はemployee_idです。
    クラウド・サービス上 <Service URL as received in the Welcome email from Oracle Cloud>/<Resource Template Name>/<employee_id>

    例: https://databasetrial7477:anjani.db.us2.oraclecloudapps.com/apex/employeesfeed/100
    この場合、https://databasetrial7477:anjani.db.us2.oraclecloudapps.com/apex/は、このチュートリアルで使用されているクラウド・サービスのサブスクリプションのサービスURLで、employeesfeedはリソース・テンプレート名、100はemployee_idです。
    この図の説明
  8. いずれか1つのemployee_idのURIを選択し、クリップボードにコピーします。

    この図の説明
  9. ブラウザを開き、コピーしたURIをペーストし、[Enter]を押します。特定の「employee」の詳細がJSON結果セットとして返されます。

    この図の説明

特定の「Department」の「Employees」フィードを使用したリソース・ハンドラの作成

このセクションでは、Department IDを指定してフィード・ソース・タイプのRESTfulサービスを作成します。フィード結果はJSONとして表示されます。次の手順を実行します。

  1. 「Create Template」をクリックします。

    この図の説明
  2. employeesfeed/{id},を入力し、「Create」をクリックします。

    この図の説明
  3. 「employeesfeed/{id},」の下の「Create Handler」をクリックします。

    この図の説明
  4. 「Method」に「Get」、「Source Type」に「Feed」、「Requires Secure Access」「No」を選択します。「Source」の下に次のSQL問合せを入力し、「Create」をクリックします。

    select employee_id, first_name
    from employees
    where department_id = :id

    この図の説明
  5. さらに下方にスクロールし、「Create Parameter」をクリックして、department_idを受信するハンドラにINパラメータを追加します。

    この図の説明
  6. 「Name」および「Bind Variable Name」にidを入力します。「Access Method」に「IN」、「Parameter Type」に「String」を選択し、「Create」をクリックします。

    この図の説明
  7. 「Source Type」を変更します。「Parameters」の下で、「Name」の下の「id」リンクをクリックします。

    この図の説明
  8. 「Source Type」に「URI」を選択し、「Apply Changes」をクリックします。

    この図の説明
  9. このハンドラをテストする前に、バインド変数を設定して入力パラメータの値、idを渡します。「Set Bind Variables >」をクリックします。

    この図の説明
  10. 「:ID」に 60 を入力し、「Test」をクリックします。

    この図の説明
  11. 結果はJSON形式で表示されます。各アイテムは、RESTfulサービスからのベースURIを含んだURIと、パラメータとして使用されるdepartment_idの値で構成されます。「Feed」ソース・タイプの場合、最初の列は一意の識別子でなければならず、このRESTfulサービスが呼び出される際にハイパーリンクに変換されます。
    この例では「department_id」は最初の列で、ハイパーリンクに変換されます。

    たとえば、次のスクリーンショットでは、「department_id = 60」の「employee」のURIは次のようになりますhttps://databasetrial7477:anjani.db.us2.oraclecloudapps.com/apex/employeesfeed/60?page=1この場合、page=1はこれらの結果は1ページ目に含まれることを意味します。結果セットに多数のレコードが存在する場合は、結果は2ページ目以降にまたがることになります。

    注意: この例に示されているURIは、このチュートリアルを実行するために使用されるデータベース・クラウド・サービスに固有のものであり、ユーザーのものとは異なる場合があります。また、URIの値も、このチュートリアルをオンプレミスか、クラウド・サービス上のどちらで実行しているかによって異なります。一般に、URI形式は次のようになります。

    オンプレミス http://localhost:<Port where ords is set up>/ords/<schema name>/<Resource Template Name>/<department_id>?page=1

    例: http://localhost:9090/ords/apex/employeesfeed/60?page=1
    この場合、ordsはOracle APEXのインストール中にポート9090で設定されており、apexはスキーマ名、employeesfeedはリソース・テンプレート名、60はdepartment_idです。
    クラウド・サービス上 <Service URL as received in the Welcome email from Oracle Cloud>/<Resource Template Name>/<department_id>?page=1

    例: https://databasetrial7477:anjani.db.us2.oraclecloudapps.com/apex/employeesfeed/60?page=1
    この場合、https://databasetrial7477:anjani.db.us2.oraclecloudapps.com/apex/は、このチュートリアルで使用されているクラウド・サービスのサブスクリプションのサービスURLで、employeesfeedはリソース・テンプレート名、60はdepartment_idです。
    この図の説明

Oracle Application ExpressでのRESTful Webサービス参照の作成

このトピックでは、データベース・アプリケーションを作成、およびアプリケーション内でのWebサービス参照を作成することによって、Oracle Application ExpressでRESTful Webサービスを消費します。Webサービスを使用するフォームおよびレポート・ページを作成します。

注意: このチュートリアルをオンプレミスで実行している場合は、このチュートリアルの「前提条件」セクションでダウンロードし、解凍したfiles.zipからのAPEX_ACL.sqlスクリプトを実行して、正しい権限が付与されていることを確認してください。

  1. Oracle Application Expressのホーム・ページから「Application Builder」の横の下向き矢印をクリックし、「Database Applications」を選択します。

    この図の説明
  2. 「Create」アイコンをクリックします。

    この図の説明
  3. デフォルトを受け入れ、「Next >」をクリックします。

    この図の説明
  4. 「Name」にRESTful Web Services Demo を入力し、「Next >」をクリックします。

    この図の説明
  5. 「Next」をクリックします。

    この図の説明
  6. デフォルトを受け入れ、「Next >」をクリックします。

    この図の説明
  7. 「Authentication Scheme」に「Application Express Accounts」を選択し、「Next >」をクリックします。

    この図の説明
  8. 「Create Application」をクリックします。

    この図の説明
  9. アプリケーションが作成されました。「Shared Components」をクリックします。

    この図の説明
  10. 「Data References」の下の「Web Service References」をクリックします。

    この図の説明
  11. 「Create >」をクリックします。

    この図の説明
  12. 「What type of Web reference would you like to create」に「REST」を選択し、「Next >」をクリックします。

    この図の説明
  13. 「Name」にemployeesを入力します。「HTTP Method」に「GET」、「Basic Authentication」に「No」を選択します。「URL」には、このチュートリアルの最初のセクションで作成したGETサービス・ハンドラのWeb参照URIを入力します。

    次の表で説明しているように、ユーザーのURIはOracle Application Expressインスタンスの場所(オンプレミスか、クラウド・サービス上のいずれか)によって異なります。例: https://databasetrial7477-anjani.db.us2.oraclecloudapps.com/apex/employees/

    オンプレミス http://localhost:<Port where ords is set up>/ords/<schema name>/<Resource Template Name>/

    例: http://localhost:9090/ords/apex/employees/
    この場合、ordsはOracle APEXのインストール中にポート9090で設定されており、apexはスキーマ名、employeesはリソース・テンプレート名です。
    クラウド・サービス上 <Service URL as received in the Welcome email from Oracle Cloud>/<Resource Template Name>/

    例: https://databasetrial7477:anjani.db.us2.oraclecloudapps.com/apex/employees/
    この場合、https://databasetrial7477:anjani.db.us2.oraclecloudapps.com/apex/は、このチュートリアルで使用されているクラウド・サービスのサブスクリプションのサービスURLで、employeesはリソース・テンプレート名です。
    このRESTful WebサービスにはHTTPヘッダー・パラメータは必要ありません。そのため、「Delete Header」アイコンをクリックします。


    この図の説明
  14. 「Next」をクリックします。

    この図の説明
  15. GETサービス・ハンドラにはどのパラメータも定義されていません。そのため、「Input Parameters」の「Delete Parameter」アイコンをクリックします。

    この図の説明
  16. 「Next」をクリックします。

    この図の説明
  17. 次に、「REST Outputs」を定義する必要があります。「Output Format」に「Text」を選択します「Parameter Delimiter」にカンマ、「New Record Delimiter」に\nを入力します。
    「Output Parameters」の下で、「Name」にEmployee ID、「Path」に1を入力します。「Type」に「String」を選択し、「Add Parameter」をクリックします。

    この図の説明
  18. 同様に、次の出力パラメータを追加し、「Create」をクリックします。

    名前 パス データ型
    Name
    2
    文字列
    Hire Date
    6
    文字列
    Job Id
    7
    文字列
    この図の説明
  19. 「View Report」アイコンをクリックします。

    この図の説明
  20. 「employees」の「Test」アイコンをクリックします。

    この図の説明
  21. 「Test」をクリックします。

    この図の説明
  22. すべての「employees」の詳細が「Response」セクションに表示されます。「Cancel」をクリックします。

    この図の説明
  23. ブレッドクラムで「Application<n>」をクリックします。

    この図の説明
  24. 「Create Page >」をクリックします。

    この図の説明
  25. 「Form」アイコンをクリックします。

    この図の説明
  26. 「Form and Report on Web Service」アイコンをクリックします。

    この図の説明
  27. 「Web Service Reference」に「employees」、「Operation」に「doREST」を選択し、「Next >」をクリックします。

    注意: 「Shared Components」の「Web Service References」の下で追加したため、「Web Service Reference」の選択済リストには「employees」が表示されます。

    この図の説明
  28. 「Next」をクリックします。

    この図の説明
  29. 「Next」をクリックします。

    この図の説明
  30. デフォルトを受け入れ、「Next >」をクリックします。

    この図の説明
  31. 「Create」をクリックします。

    この図の説明
  32. 新しいページが作成されました。「Save and Run Page」をクリックします。

    この図の説明
  33. 自分のOracle Application Express資格証明を入力し、「Log In」をクリックします。

    この図の説明
  34. 「Submit」をクリックします。

    この図の説明
  35. Webサービスが実行され、結果が表示されます。

    この図の説明

Javaクライアントを使用してOracle Application Expressで作成されたRESTful Webサービスの消費

このセクションでは、Javaクライアントを使用してOracle Application Expressで作成したWebサービスを消費します。

  1. コマンド・プロンプトを開きます。

    この図の説明
  2. このチュートリアルの「前提条件」で使用可能なファイルを抽出したディレクトリに移動します。RESTemp Javaコードが常駐している場所に移動します。この例では、Downloads ディレクトリ内に抽出したと想定し、次のコマンドを実行してC:\Downloads\files\RESTemp directoryに移動します。

    cd Downloads
    cd RESTemp

    この図の説明
  3. 「employee」の情報をフェッチするには、次のコマンドを入力します。「employee_id」の値を渡します。
    run.cmd S 103

    注意: ここでは、コマンドライン・パラメータの'S'は選択を行うことを示します。また、ダウンロードしたrun.cmdファイルを編集して、RESTful WebサービスのURLを置換する必要もあります。

    この図の説明
  4. 「employee_id = 103」の「employee」のすべての詳細が表示されます。

    この図の説明
  5. 「employees」表に新規の値を挿入するには、次のコマンドを入力して、表に新規の行を挿入するPOSTメソッドを起動します。
    run.cmd I

    注意: ここでは、コマンドライン・パラメータの'I'は、新規の行を挿入することを示します。

    この図の説明
  6. 「first name」、「last name」、「email address」、「hire date」および「job ID」を入力します。新規の「employee」のIDで新規の列が作成されます。
    SQLワークショップに移動して新規の列の値をチェックすることによって、この新規の列のエントリが表内に作成されたことを確認できます。

    この図の説明

まとめ

このチュートリアルでは、次の操作方法を学びました。

  • Oracle Application Expressを使用して様々なリソース・ハンドラでRESTful Webサービスを作成する。
  • Application ExpressでRESTful Webサービス参照を作成する。
  • Javaクライアントを使用してApplication Expressで作成されたWebサービスを消費する。

詳細

クレジット

  • カリキュラム開発者: Anjani Pothula

  • 他の原本協力者:Drue Swadener