Database Schema ServiceでのサンプルRESTful Webサービスのレビュー


オプション



開始する前に

目的

このチュートリアルでは、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サービスにアクセスするには、次の手順を実行します。

  1. Oracle Application Expressのホーム・ページで、「SQL Workshop」タブを選択し、「RESTful Services」を選択します。

    このイメージの説明
  2. 「RESTful Services」ページが表示されます。デフォルトのoracle.example.hr RESTfulサービスを選択します。次の項では、デフォルトで用意されているRESTfulサービスの調査を開始します。

    このイメージの説明

バインド変数を使用した「Query One Row」に基づくJSON結果セットの取得

この項では、特定のidに関する従業員情報をすべて取得するemployees/{id} RESTfulサービスをレビューおよびテストします。URIの一部として送信されるバインド変数を識別するために中カッコ{id}が使用されます。次の手順を実行します。

  1. employees/{id}サービス用のGETハンドラを選択します。

    このイメージの説明
  2. ソース・フィールド内の問合せをレビューします。ソース・タイプが「Query One Row」に設定されているため、ハンドラの実行時には1行のみが実行されます。このRESTfulサービスをテストするempnoを指定します。「Set Bind Variables」をクリックします。

    このイメージの説明
  3. 「Bind Variable」の「:ID」として「7876」を入力し、「Test」をクリックします。

    このイメージの説明
  4. URIの最終部分として渡される変数であるempno 7876に関する情報がすべて表示されます。このウィンドウを閉じます

    このイメージの説明

フィードに基づくJSON結果セットの取得

このトピックでは、employees内のempnoおよびename値を選択してフィードとして表示するemployeesfeed/ RESTfulサービスをレビューおよびテストします。次の手順を実行します。

  1. 画面上部にある「RESTful Service Module」ブレッドクラムをクリックし、デフォルトのoracle.example.hr RESTfulサービスに戻ります。

    このイメージの説明
  2. employeesfeed/{id}サービス用のGETハンドラを選択します。

    このイメージの説明
  3. CSVのJSON形式の結果を取得するには、「Format」フィールドで、「JSON」を選択します。「Apply Changes」をクリックします。

    このイメージの説明
  4. oracle.example.hr RESTfulサービスのツリー・ビューで、employeesfeed/サービスのGETハンドラを選択します。

    このイメージの説明
  5. ソース・フィールド内の問合せをレビューします。ソース・タイプがフィードに設定されているため、返されるJSONには、同じURIと最初の列がパラメータとして含まれるRESTful Webサービス・コールへのリンクが含まれます。「Test」をクリックします。

    このイメージの説明
  6. EMP表内のすべての従業員に対して返されたデータが表示されます。URIには、個別レコードへのリンクが含まれます。このリンクは実際にはemployeesfeed/{id}リソース・テンプレートを使用しています。URL内のemployeesfeed/7782に注意してください。このURLをクリックすると、個別従業員レコードに移動します。

    このイメージの説明
  7. URIリンクをクリックすると、クリックしたURIに対してemployeesfeed/{id} RESTful Webサービスが実行され、個別従業員レコードが表示されます。

    このイメージの説明
  8. ブラウザの「戻る」ボタンを2回クリックし、Oracle Application Expressに戻ります。

    このイメージの説明

CSV形式のデータの取得

この項では、従業員情報をすべて選択してCSV形式で返すempinfo/ RESTfulサービスをレビューおよびテストします。このファイルを保存するよう求められますが、このファイルは、Microsoft ExcelやWordpadなどのCSVエディタを使用して表示できます。次の手順を実行します。

  1. empinfo/サービス用のGETハンドラを選択します。

    このイメージの説明
  2. 「Source Type」が「Query」で「Format」が「CSV」に設定されています。この問合せでは、EMP表からすべてのレコードが選択されます。「Test」をクリックします。

    このイメージの説明
  3. ファイルを開くか保存するためのダイアログが表示されます。「Save」を選択し、「OK」をクリックします。
    注意: Firefoxの場合、ファイルを保存するための「を開く」ダイアログが表示されます。

    このイメージの説明
  4. ファイル名を入力し、拡張子.csvを付け、「保存」をクリックすることにより、.csvファイルを作成してコンピュータに保存します。

    このイメージの説明
  5. ファイルをMicrosoft Excelまたは別のエディタで開き、CSVファイルのコンテンツを表示します。emp表内のデータがすべて表示されます。

    このイメージの説明

バインド変数によって区別されたJSON結果セットの取得

このトピックでは、渡されたバインド構成に基づいて異なるJSONデータ・セットを取得します。次の手順を実行します。

  1. empsec/{empname}サービス用のGETハンドラを選択します。

    このイメージの説明
  2. 「Query」には複合的なWHERE句が含まれており、この句は、URLを介して渡されるempnameの役職がPRESIDENTとMANAGERのどちらであるかを確認し、条件が満たされたときにすべての部門の従業員のリストを表示します。empnameがPRESIDENTまたはMANAGERでない場合は、その従業員が属する部門内の従業員のリストを表示します。バインド変数を設定し、「Set Bind Variables」をクリックします。

    このイメージの説明
  3. EMPNAMEの「Value」として「ADAMS」を入力し、「Test」をクリックします。

    このイメージの説明
  4. ADAMSは管理者ではないため、リストには部門20の従業員のみが含まれています。ウィンドウを閉じます

    このイメージの説明
  5. 今回は、EMPNAMEの「Value」として「JONES」を入力し、「Test」をクリックします。

    このイメージの説明
  6. JONESは管理者であるため、すべての部門のすべての従業員がリスト内に表示されています。このウィンドウを閉じます

    このイメージの説明
  7. 今回は、EMPNAMEの「Value」として「KING」を入力し、「Test」をクリックします。

    このイメージの説明
  8. KINGは社長であるため、すべての部門のすべての従業員が表示されています。このウィンドウを閉じます

    このイメージの説明
  9. 今回は、EMPNAMEの「Value」として「MILLER」を入力し、「Test」をクリックします。

    このイメージの説明
  10. 今回、Millerは管理者でないため、部門10の従業員のみが表示されています。このウィンドウを閉じます

    このイメージの説明

PL/SQLブロックに基づく結果セットの書式設定

このトピックでは、PL/SQLブロックの実行に基づいて結果セットを書式設定します。次の手順を実行します。

  1. 「RESTful Service Module」ブレッドクラムを選択します。

    このイメージの説明
  2. empsecformat/{empname}サービス用のGET ハンドラを選択します。

    このイメージの説明
  3. 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('
    '); sys.htp.bodyclose; sys.htp.htmlclose; END;
    このイメージの説明
  4. 今回は、EMPNAMEの「Value」として「ADAMS」を入力し、「Test」をクリックします。

    このイメージの説明
  5. 前のトピックと同じ結果が表示されていますが、今回は結果が書式設定されています。ウィンドウを閉じます

    このイメージの説明
  6. 今回は、EMPNAMEの「Value」として「JONES」を入力し、「Test」をクリックします。

    このイメージの説明
  7. JONESは管理者であるため、すべての部門のすべての従業員がリスト内に表示されています。このウィンドウを閉じます

    このイメージの説明

JSON結果セットでのページ区切りの設定

このトピックでは、JSON結果セットに表示されるデータの行数を制御する、「Resource Handler」ページで「Pagination Size」が「7」に設定されたemployees/ RESTfulサービスをレビューおよびテストします。このSQL問合せには、結果の追加ページを表示する次および前のURIリンクを作成するために必要なSQLが含まれます。また、このURIには、個別従業員レコードを表示するために前に調べたemployees/{id} RESTful Webサービスを呼び出すためのURLが含まれます。次の手順を実行します。

  1. 「RESTful Service Module」ブレッドクラムを選択します。

    このイメージの説明
  2. employees/サービス用のGETハンドラを選択します。

    このイメージの説明
  3. 「Source Type」が「Query」で「Format」が「JSON」に設定されており、「JSON」が「7」に設定されています。このSQLでは、結果をページ区切りする際に最初、前および次へのリンクを提供して結果を指定しています。「Test」をクリックします。

    このイメージの説明
  4. 最初の7行がJSON結果として表示されます。各アイテムのuri:{$ref}により、リンク内に指定されているidに対してemployees/{id} RESTful Webサービスが呼び出されています。リスト内の最初のuri:{$ref}リンク(この場合はempno 7369のリンク)をクリックします。

    このイメージの説明
  5. empno 7369の従業員の完全な詳細を表示できます。戻る矢印をクリックし、前のページに移動します。

    このイメージの説明
  6. next:{$ref}リンクを選択し、データの次のページに移動します。

    このイメージの説明
  7. 最初、前(この場合はこれも最初のページ)および次のページへのリンクとともに次の7行が表示されます。

    このイメージの説明

概要

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

  • デフォルトのRESTful Webサービス・モジュールをレビューおよびテストする

詳細

クレジット

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

  • 他の貢献者: Drue Swadener