始める前に
目的
このチュートリアルでは、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サービスを作成するには、次の手順を実行します。
-
Oracle Application Expressの「Home」ページから「SQL Workshop」タブを選択し、「RESTful Services」を選択します。
この図の説明 -
「Create >」をクリックします。
この図の説明 -
ページに、「RESTful Services Module」、「Resource Template」、「Resource Handler」という名前の3つのカテゴリにグループ化されたエントリが読み込まれます。「RESTful Services Module」で、「Name」にemployeesを入力し、さらに下方にスクロールします。
この図の説明 -
「Resource Template」で、「URI Template」にemployees/を入力して自分のUniform Resource Identifier (URI)を特定し、さらに下方にスクロールします。
この図の説明 -
「Resource Handler」で、「Method」に「GET」、「Source Type」に「Query」、「Format」に「CSV」を選択します。これにより、リソース・ハンドラによって使用されるHTTPメソッドが特定されます。
「Source」に次のSQL問合せを入力し、「Create Module」をクリックします。
select * from employees
この図の説明 -
「GET」ハンドラが「employees/」の下に作成されます。そのプロパティを編集するには、「employees/」の下の「GET」をクリックします。
この図の説明 -
「Requires Secure Access」に「No」を選択し、「Apply Changes」をクリックします。
この図の説明 -
RESTfulサービス・ハンドラの動作をテストするには、「Test」をクリックします。
注意: 画面に「Test」ボタンが表示されない場合は、Oracle Application ExpressのインストールでRESTfulサービスが正しく構成されていることを確認してください。詳細は、「Oracle Application ExpressでのRESTfulサービスの構成手順」を参照してください。Database Cloud Serviceを使用している場合は、デフォルトでRESTfulサービスは構成されます。この図の説明 -
ファイルを保存するように求められます。このファイルは後でCSVエディタを使用して表示できます。
この図の説明 -
CSV形式の結果セットが表示されます。
この図の説明 -
次に、同じWebサービスでPOSTメソッドのハンドラを作成しましょう。「employees/」の下の「Create Handler」をクリックします。
この図の説明 -
「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;
この図の説明 -
ページを下方にスクロールし、「Create Parameter」をクリックして、新規作成されたemployeeのIDを返すハンドラにOUTパラメータを追加します。
この図の説明 -
「Name」および「Bind Variable Name」にemployee_idを入力します。「Access Method」に「OUT」、「Source Type」に「HTTP Header」、「Parameter Type」に「String」を選択し、「Create」をクリックします。
この図の説明 -
OUTパラメータが作成されました。次のセクションでは、新規のテンプレートを作成し、バインド変数を使用して「Query One Row」に基づいてJSON結果セットを取得します。
この図の説明
「Query One Row」を使用したリソース・ハンドラの作成
このセクションでは、「employee id」を指定して「employee」の詳細情報を提供するRESTfulサービスを作成します。結果はJSON形式で返されます。次の手順を実行します。
-
「Create Template」をクリックします。
この図の説明 -
「URI Template」にemployees/{id}を入力し、「Create」をクリックします。
この図の説明 -
「employees/{id}」の下の「Create Handler」をクリックします。
この図の説明 -
「Method」に「GET」、「Source Type」に「Query One Row」、「Requires Secure Access」に「No」を選択します。
「Source」に次のSQL問合せを入力し、「Create」をクリックします。
select * from employees where employee_id = :id
この図の説明 -
さらに下方にスクロールし、「Create Parameter」をクリックして、「employee」のIDを受信するハンドラにINパラメータを追加します。
この図の説明 -
「Name」および「Bind Variable Name」にidを入力します。「Access Method」に「IN」、「Source Type」に「HTTP Header」、「Parameter Type」に「String」を選択し、「Create」をクリックします。
この図の説明 -
「Source Type」を変更します。「Parameters」の下で、「Name」の下の「id」リンクをクリックします。
この図の説明 -
「Source Type」に「URI」を選択し、「Apply Changes」をクリックします。
この図の説明 -
このハンドラをテストする前に、バインド変数を設定して入力パラメータの値、idを渡します。「Set Bind Variables >」をクリックします。
この図の説明 -
「:ID」に203を入力し、「Test」をクリックします。
この図の説明 -
「employee_id = 203」の「employee」の完全な詳細が表示されます。
この図の説明
「Employees」フィードを使用したリソース・ハンドラの作成
このセクションでは、フィード・ソース・タイプのRESTfulサービスを作成します。フィード結果はJSONとして表示されます。フィード内の各アイテムには、リソースのサマリーおよびリソースの完全表現へのハイパーリンクが含まれます。次の手順を実行します。
-
「Create Template」をクリックします。
この図の説明 -
「URI Template」にemployeesfeed/を入力し、「Create」をクリックします。
この図の説明 -
「employeesfeed/」の下の「Create Handler」をクリックします。
この図の説明
-
「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この図の説明 -
「employeesfeed/」の下の「GET」をクリックし、「Resource Handler Editor」を開きます。
この図の説明 -
ページを下方にスクロールし、「Test」をクリックします。
この図の説明 -
結果はJSON形式で表示されます。各アイテムは、RESTfulサービスからのベースURIを含んだURIと、パラメータとして使用される「employee_id」の値で構成されます。「Feed」ソース・タイプの場合、最初の列は一意の識別子でなければならず、このRESTfulサービスが呼び出される際にハイパーリンクに変換されます。
この例では「employee_id」は最初の列で、ハイパーリンクに変換されます。
たとえば、次のスクリーンショットでは、employee_id = 100
の「employee」のURIは次のようになりますhttps://databasetrial7477:
注意: この例に示されているURIは、このチュートリアルを実行するために使用されるデータベース・クラウド・サービスに固有のものであり、ユーザーのものとは異なる場合があります。また、URIの値も、このチュートリアルをオンプレミスか、クラウド・サービス上のどちらで実行しているかによって異なります。一般に、URI形式は次のようになります。anjani
.db.us2.oraclecloudapps.com/apex/employeesfeed/100
オンプレミス 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:
この場合、https://databasetrial7477:anjani
.db.us2.oraclecloudapps.com/apex/employeesfeed/100anjani
.db.us2.oraclecloudapps.com/apex/は、このチュートリアルで使用されているクラウド・サービスのサブスクリプションのサービスURLで、employeesfeedはリソース・テンプレート名、100はemployee_idです。この図の説明 -
いずれか1つのemployee_idのURIを選択し、クリップボードにコピーします。
この図の説明 -
ブラウザを開き、コピーしたURIをペーストし、[Enter]を押します。特定の「employee」の詳細がJSON結果セットとして返されます。
この図の説明
特定の「Department」の「Employees」フィードを使用したリソース・ハンドラの作成
このセクションでは、Department IDを指定してフィード・ソース・タイプのRESTfulサービスを作成します。フィード結果はJSONとして表示されます。次の手順を実行します。
-
「Create Template」をクリックします。
この図の説明 -
employeesfeed/{id},を入力し、「Create」をクリックします。
この図の説明 -
「employeesfeed/{id},」の下の「Create Handler」をクリックします。
この図の説明 -
「Method」に「Get」、「Source Type」に「Feed」、「Requires Secure Access」「No」を選択します。「Source」の下に次のSQL問合せを入力し、「Create」をクリックします。
select employee_id, first_name
from employees
where department_id = :idこの図の説明 -
さらに下方にスクロールし、「Create Parameter」をクリックして、department_idを受信するハンドラにINパラメータを追加します。
この図の説明 -
「Name」および「Bind Variable Name」にidを入力します。「Access Method」に「IN」、「Parameter Type」に「String」を選択し、「Create」をクリックします。
この図の説明 -
「Source Type」を変更します。「Parameters」の下で、「Name」の下の「id」リンクをクリックします。
この図の説明 -
「Source Type」に「URI」を選択し、「Apply Changes」をクリックします。
この図の説明 -
このハンドラをテストする前に、バインド変数を設定して入力パラメータの値、idを渡します。「Set Bind Variables >」をクリックします。
この図の説明 -
「:ID」に 60 を入力し、「Test」をクリックします。
この図の説明 -
結果はJSON形式で表示されます。各アイテムは、RESTfulサービスからのベースURIを含んだURIと、パラメータとして使用されるdepartment_idの値で構成されます。「Feed」ソース・タイプの場合、最初の列は一意の識別子でなければならず、このRESTfulサービスが呼び出される際にハイパーリンクに変換されます。
この例では「department_id」
は最初の列で、ハイパーリンクに変換されます。
たとえば、次のスクリーンショットでは、「department_id = 60」の「employee」のURIは次のようになりますhttps://databasetrial7477:
この場合、page=1はこれらの結果は1ページ目に含まれることを意味します。結果セットに多数のレコードが存在する場合は、結果は2ページ目以降にまたがることになります。anjani
.db.us2.oraclecloudapps.com/apex/employeesfeed/60?page=1
注意: この例に示されている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:
/は、このチュートリアルで使用されているクラウド・サービスのサブスクリプションのサービスURLで、anjani
.db.us2.oraclecloudapps.com/apexemployeesfeed
はリソース・テンプレート名、60
はdepartment_idです。この図の説明
Oracle Application ExpressでのRESTful Webサービス参照の作成
このトピックでは、データベース・アプリケーションを作成、およびアプリケーション内でのWebサービス参照を作成することによって、Oracle Application ExpressでRESTful Webサービスを消費します。Webサービスを使用するフォームおよびレポート・ページを作成します。
注意: このチュートリアルをオンプレミスで実行している場合は、このチュートリアルの「前提条件」セクションでダウンロードし、解凍したfiles.zipからのAPEX_ACL.sql
スクリプトを実行して、正しい権限が付与されていることを確認してください。
-
Oracle Application Expressのホーム・ページから「Application Builder」の横の下向き矢印をクリックし、「Database Applications」を選択します。
この図の説明 -
「Create」アイコンをクリックします。
この図の説明 -
デフォルトを受け入れ、「Next >」をクリックします。
この図の説明 -
「Name」にRESTful Web Services Demo を入力し、「Next >」をクリックします。
この図の説明 -
「Next」をクリックします。
この図の説明 -
デフォルトを受け入れ、「Next >」をクリックします。
この図の説明 -
「Authentication Scheme」に「Application Express Accounts」を選択し、「Next >」をクリックします。
この図の説明 -
「Create Application」をクリックします。
この図の説明 -
アプリケーションが作成されました。「Shared Components」をクリックします。
この図の説明 -
「Data References」の下の「Web Service References」をクリックします。
この図の説明 -
「Create >」をクリックします。
この図の説明 -
「What type of Web reference would you like to create」に「REST」を選択し、「Next >」をクリックします。
この図の説明 -
「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:
この場合、https://databasetrial7477:anjani
.db.us2.oraclecloudapps.com/apex/employees/
anjani
.db.us2.oraclecloudapps.com/apex/は、このチュートリアルで使用されているクラウド・サービスのサブスクリプションのサービスURLで、employeesはリソース・テンプレート名です。
この図の説明 -
「Next」をクリックします。
この図の説明 -
GETサービス・ハンドラにはどのパラメータも定義されていません。そのため、「Input Parameters」の「Delete Parameter」アイコンをクリックします。
この図の説明 -
「Next」をクリックします。
この図の説明 -
次に、「REST Outputs」を定義する必要があります。「Output Format」に「Text」を選択します。「Parameter Delimiter」にカンマ、「New Record Delimiter」に\nを入力します。
「Output Parameters」の下で、「Name」にEmployee ID、「Path」に1を入力します。「Type」に「String」を選択し、「Add Parameter」をクリックします。この図の説明 -
同様に、次の出力パラメータを追加し、「Create」をクリックします。
名前 パス データ型 Name
2
文字列
Hire Date
6
文字列 Job Id
7
文字列 この図の説明 -
「View Report」アイコンをクリックします。
この図の説明 -
「employees」の「Test」アイコンをクリックします。
この図の説明 -
「Test」をクリックします。
この図の説明 -
すべての「employees」の詳細が「Response」セクションに表示されます。「Cancel」をクリックします。
この図の説明 -
ブレッドクラムで「Application<n>」をクリックします。
この図の説明 -
「Create Page >」をクリックします。
この図の説明 -
「Form」アイコンをクリックします。
この図の説明 -
「Form and Report on Web Service」アイコンをクリックします。
この図の説明 -
「Web Service Reference」に「employees」、「Operation」に「doREST」を選択し、「Next >」をクリックします。
注意: 「Shared Components」の「Web Service References」の下で追加したため、「Web Service Reference」の選択済リストには「employees」が表示されます。この図の説明 -
「Next」をクリックします。
この図の説明 -
「Next」をクリックします。
この図の説明 -
デフォルトを受け入れ、「Next >」をクリックします。
この図の説明 -
「Create」をクリックします。
この図の説明 -
新しいページが作成されました。「Save and Run Page」をクリックします。
この図の説明 -
自分のOracle Application Express資格証明を入力し、「Log In」をクリックします。
この図の説明 -
「Submit」をクリックします。
この図の説明 -
Webサービスが実行され、結果が表示されます。
この図の説明
Javaクライアントを使用してOracle Application Expressで作成されたRESTful Webサービスの消費
このセクションでは、Javaクライアントを使用してOracle Application Expressで作成したWebサービスを消費します。
-
コマンド・プロンプトを開きます。
この図の説明 -
このチュートリアルの「前提条件」で使用可能なファイルを抽出したディレクトリに移動します。RESTemp Javaコードが常駐している場所に移動します。この例では、
Downloads
ディレクトリ内に抽出したと想定し、次のコマンドを実行してC:\Downloads\files\RESTemp directory
に移動します。
cd Downloads
cd RESTemp
この図の説明 -
「employee」の情報をフェッチするには、次のコマンドを入力します。「employee_id」の値を渡します。
run.cmd S 103
注意: ここでは、コマンドライン・パラメータの'S
'は選択を行うことを示します。また、ダウンロードしたrun.cmd
ファイルを編集して、RESTful WebサービスのURLを置換する必要もあります。この図の説明 -
「employee_id = 103」の「employee」のすべての詳細が表示されます。
この図の説明 -
「employees」表に新規の値を挿入するには、次のコマンドを入力して、表に新規の行を挿入するPOSTメソッドを起動します。
run.cmd I
注意: ここでは、コマンドライン・パラメータの'I'は、新規の行を挿入することを示します。この図の説明 -
「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サービスを消費する。
詳細
-
『Oracle® Application Express SQLワークショップ・ガイド』のRESTfulサービスの使用に関する項
- Oracle Application ExpressでのRESTfulサービスの構成手順
- Oracle Database Cloud Service - Database Schema Serviceに関する他のチュートリアル
クレジット
-
カリキュラム開発者: Anjani Pothula
- 他の原本協力者:Drue Swadener