開始する前に
目的
このチュートリアルでは、Oracle Database Schema ServiceでRESTful Webサービスを使用する方法について説明するために、サンプルのRESTful Webサービスoracle.example.hr
をレビューします。
所要時間
約30分
概要
このチュートリアルでは、Database Schema Serviceに用意されているサンプルのRESTful Webサービスに対する手順を実行します。
コンテキスト
RESTful Webサービスは、Oracle Database内で特定のSQL文またはPL/SQLブロックを呼び出すサービスです。RESTful Webサービス・ウィザードは、RESTfulWebサービスを宣言で作成する上で役に立つOracle Application ExpressのSQLワークショップ領域内の一連のページです。
RESTful Webサービスを定義したら、一意のURI (Uniform Resource Identifier)を使用して呼び出すことができます。
RESTful Webサービスは、モジュール、リソース・テンプレートおよびテンプレート内のハンドラを介してOracle APEX内で編成されます。リソース・テンプレートには、ハンドラによって定義されるURIの最終部分によって完成されるURIの接頭辞が含まれます。URIの最初の部分は、特定のOracle Database Schema Serviceのアドレスです。
注意: このチュートリアルでは、RESTful Webサービスを使用してOracle Database Schema Service内のデータを問い合わせる例を示します。POSTおよびPUTメソッドを介したデータの挿入および更新について学ぶには、『Oracle Cloud Oracle Database Cloud Serviceの使用』のRESTful Webサービスの実装に関する項を参照してください。
必要なもの
このチュートリアルを始める前に次の用意をする必要があります。
- 「Database Schema Serviceのサインアップ」チュートリアルを実行します。
- ブラウザのJSONプラグインをインストールします。適切なリンクを取得するためにインターネットでの検索が必要な場合があります。ただし、Firefox用のリンクはここにあります。
RESTful Webサービスへのアクセス
RESTfulサービス・モジュールは、共通URI接頭辞の下にあるテンプレートのグループです。Database Schema Service内のRESTful Webサービスにアクセスするには、次の手順を実行します。
-
Oracle Application Expressのホーム・ページで、「SQL Workshop」タブを選択し、「RESTful Services」を選択します。
-
「RESTful Services」ページが表示されます。デフォルトの
oracle.example.hr
RESTfulサービスを選択します。次の項では、デフォルトで用意されているRESTfulサービスの調査を開始します。
バインド変数を使用した「Query One Row」に基づくJSON結果セットの取得
この項では、特定のid
に関する従業員情報をすべて取得するemployees/{id}
RESTfulサービスをレビューおよびテストします。URIの一部として送信されるバインド変数を識別するために中カッコ{id}
が使用されます。次の手順を実行します。
-
employees/{id}
サービス用のGETハンドラを選択します。 -
ソース・フィールド内の問合せをレビューします。ソース・タイプが「Query One Row」に設定されているため、ハンドラの実行時には1行のみが実行されます。このRESTfulサービスをテストする
empno
を指定します。「Set Bind Variables」をクリックします。 -
「Bind Variable」の「:ID」として「7876」を入力し、「Test」をクリックします。
-
URIの最終部分として渡される変数である
empno
7876に関する情報がすべて表示されます。このウィンドウを閉じます。
フィードに基づくJSON結果セットの取得
このトピックでは、employees
内のempno
およびename
値を選択してフィードとして表示するemployeesfeed/
RESTfulサービスをレビューおよびテストします。次の手順を実行します。
-
画面上部にある「RESTful Service Module」ブレッドクラムをクリックし、デフォルトの
oracle.example.hr
RESTfulサービスに戻ります。 -
employeesfeed/{id}
サービス用のGETハンドラを選択します。 -
CSVのJSON形式の結果を取得するには、「Format」フィールドで、「JSON」を選択します。「Apply Changes」をクリックします。
-
oracle.example.hr
RESTfulサービスのツリー・ビューで、employeesfeed/
サービスのGETハンドラを選択します。 -
ソース・フィールド内の問合せをレビューします。ソース・タイプがフィードに設定されているため、返されるJSONには、同じURIと最初の列がパラメータとして含まれるRESTful Webサービス・コールへのリンクが含まれます。「Test」をクリックします。
-
EMP
表内のすべての従業員に対して返されたデータが表示されます。URIには、個別レコードへのリンクが含まれます。このリンクは実際にはemployeesfeed/{id}
リソース・テンプレートを使用しています。URL内のemployeesfeed/7782
に注意してください。このURLをクリックすると、個別従業員レコードに移動します。 -
URIリンクをクリックすると、クリックしたURIに対して
employeesfeed/{id}
RESTful Webサービスが実行され、個別従業員レコードが表示されます。 -
ブラウザの「戻る」ボタンを2回クリックし、Oracle Application Expressに戻ります。
CSV形式のデータの取得
この項では、従業員情報をすべて選択してCSV形式で返すempinfo/
RESTfulサービスをレビューおよびテストします。このファイルを保存するよう求められますが、このファイルは、Microsoft ExcelやWordpadなどのCSVエディタを使用して表示できます。次の手順を実行します。
-
empinfo/
サービス用のGETハンドラを選択します。 -
「Source Type」が「Query」で「Format」が「CSV」に設定されています。この問合せでは、
EMP
表からすべてのレコードが選択されます。「Test」をクリックします。 -
ファイルを開くか保存するためのダイアログが表示されます。「Save」を選択し、「OK」をクリックします。
注意: Firefoxの場合、ファイルを保存するための「を開く」ダイアログが表示されます。 -
ファイル名を入力し、拡張子.csvを付け、「保存」をクリックすることにより、.csvファイルを作成してコンピュータに保存します。
-
ファイルをMicrosoft Excelまたは別のエディタで開き、CSVファイルのコンテンツを表示します。
emp
表内のデータがすべて表示されます。
バインド変数によって区別されたJSON結果セットの取得
このトピックでは、渡されたバインド構成に基づいて異なるJSONデータ・セットを取得します。次の手順を実行します。
-
empsec/{empname}
サービス用のGETハンドラを選択します。 -
「Query」には複合的な
WHERE
句が含まれており、この句は、URLを介して渡されるempname
の役職がPRESIDENTとMANAGERのどちらであるかを確認し、条件が満たされたときにすべての部門の従業員のリストを表示します。empnameがPRESIDENTまたはMANAGERでない場合は、その従業員が属する部門内の従業員のリストを表示します。バインド変数を設定し、「Set Bind Variables」をクリックします。 -
EMPNAME
の「Value」として「ADAMS」を入力し、「Test」をクリックします。 -
ADAMSは管理者ではないため、リストには部門20の従業員のみが含まれています。ウィンドウを閉じます。
-
今回は、
EMPNAME
の「Value」として「JONES」を入力し、「Test」をクリックします。 -
JONESは管理者であるため、すべての部門のすべての従業員がリスト内に表示されています。このウィンドウを閉じます。
-
今回は、
EMPNAME
の「Value」として「KING」を入力し、「Test」をクリックします。 -
KINGは社長であるため、すべての部門のすべての従業員が表示されています。このウィンドウを閉じます。
-
今回は、
EMPNAME
の「Value」として「MILLER」を入力し、「Test」をクリックします。 -
今回、Millerは管理者でないため、部門10の従業員のみが表示されています。このウィンドウを閉じます。
PL/SQLブロックに基づく結果セットの書式設定
このトピックでは、PL/SQLブロックの実行に基づいて結果セットを書式設定します。次の手順を実行します。
-
「RESTful Service Module」ブレッドクラムを選択します。
-
empsecformat/{empname}
サービス用のGET ハンドラを選択します。 -
SQL問合せのみを実行するかわりに、SQL問合せの結果を書式設定するPL/SQLブロックを実行します。バインド変数を渡すには、「Set Bind Variables」をクリックします。
DECLARE prevdeptno number; deptloc varchar2(30); deptname varchar2(30); CURSOR getemps IS select * from emp where ((select job from emp where ename = :empname) IN ('PRESIDENT', 'MANAGER')) or deptno = (select deptno from emp where ename = :empname) order by deptno, ename; BEGIN sys.htp.htmlopen; sys.htp.headopen; sys.htp.title('Departments'); sys.htp.headclose; sys.htp.bodyopen; for emprecs in getemps loop if emprecs.deptno != prevdeptno or prevdeptno is null then select dname, loc into deptname, deptloc from dept where deptno = (select deptno from emp where ename = emprecs.ename); if prevdeptno is not null then sys.htp.print(' '); end if; sys.htp.print('Department ' || deptname || ' located in ' || deptloc || ''); sys.htp.print('
- ');
end if;
sys.htp.print('
- ' || emprecs.ename || ', ' || emprecs.job || ', ' || emprecs.sal || ' '); prevdeptno := emprecs.deptno; end loop; sys.htp.print('
-
今回は、
EMPNAME
の「Value」として「ADAMS」を入力し、「Test」をクリックします。 -
前のトピックと同じ結果が表示されていますが、今回は結果が書式設定されています。ウィンドウを閉じます。
-
今回は、
EMPNAME
の「Value」として「JONES」を入力し、「Test」をクリックします。 -
JONESは管理者であるため、すべての部門のすべての従業員がリスト内に表示されています。このウィンドウを閉じます。
JSON結果セットでのページ区切りの設定
このトピックでは、JSON結果セットに表示されるデータの行数を制御する、「Resource Handler」ページで「Pagination Size」が「7」に設定されたemployees/
RESTfulサービスをレビューおよびテストします。このSQL問合せには、結果の追加ページを表示する次および前のURIリンクを作成するために必要なSQLが含まれます。また、このURIには、個別従業員レコードを表示するために前に調べたemployees/{id}
RESTful Webサービスを呼び出すためのURLが含まれます。次の手順を実行します。
-
「RESTful Service Module」ブレッドクラムを選択します。
-
employees/
サービス用のGETハンドラを選択します。 -
「Source Type」が「Query」で「Format」が「JSON」に設定されており、「JSON」が「7」に設定されています。このSQLでは、結果をページ区切りする際に最初、前および次へのリンクを提供して結果を指定しています。「Test」をクリックします。
-
最初の7行がJSON結果として表示されます。各アイテムの
uri:{$ref}
により、リンク内に指定されているid
に対してemployees/{id}
RESTful Webサービスが呼び出されています。リスト内の最初のuri:{$ref}
リンク(この場合はempno 7369
のリンク)をクリックします。 -
empno 7369
の従業員の完全な詳細を表示できます。戻る矢印をクリックし、前のページに移動します。 -
next:{$ref}
リンクを選択し、データの次のページに移動します。 -
最初、前(この場合はこれも最初のページ)および次のページへのリンクとともに次の7行が表示されます。
概要
このチュートリアルでは、次の操作方法を学びました。
- デフォルトのRESTful Webサービス・モジュールをレビューおよびテストする
詳細
クレジット
-
カリキュラム開発者: Anjani Pothula
- 他の貢献者: Drue Swadener