2021年1月22日金曜日

リモート・データへのアクセス (3) - RESTデータ・ソース

こちらの記事の継続になります。リモートのデータベースに存在する表EMPを扱うRESTデータ・ソースを登録し、それをソースとして使用する対話グリッドのページを作成します。

オブジェクトのRESTの有効化 - Oracle APEXによる作業

アクセス先の表EMPのREST APIによる操作を有効化します。SQL Developer Webから実施したいのですが、AutoRESTの設定はOracle REST Data Services 20.4.1から提供が開始される予定で、今はまだ無いため、Oracle APEXを使って行います。

ワークスペースにサインインし、SQLワークショップオブジェクト・ブラウザを開きます。オブジェクト・ブラウザより表EMPを選択し、RESTのタブを開きます。

オブジェクトのRESTの有効化はい認可が必要はいに設定します。オブジェクトの別名はempにしています。セキュリティ面を考慮して、表の名前と異なる文字列を指定する場合もあります。以上の設定を行い、適用をクリックします。

オブジェクトのREST APIによる操作が有効化されました。

RESTful URIが定義されています。このRESTful URIにアクセスするには、OAuthクライアントに、ここで作成された認可ロールを、ロールとして与える必要があります。RESTful URIがオブジェクトを操作するREST APIのエンドポイントです。Oracle APEXのアプリケーションにRESTデータ・ソースを登録する際に使用するので、どこかに記録しておきましょう。

続いて、SQL Developer Webにデータベース・ユーザーAPEXDEVにてサインインします。

RESTのページを開いてROLESのタイルをクリックし、登録された認可ロールを確認します。


Oracle APEX側でオブジェクトのREST操作を有効にすると、認可ロールの所有者がORDS_PUBLIC_USERになります。


そのためGUIでは認可ロールをOAuthクライアントに割り当てることができません。プロシージャOAUTH.GRANT_CLIENT_ROLEを実行することにより、認可ロールの割り当てを行います。ロール名oracle.dbtools.role.autorest.APEXDEV.EMPをクリップボードにコピーしておきましょう。

実行するプロシージャは以下になります。
begin
    oauth.grant_client_role(
        p_client_name => 'apexdev',
        p_role_name => 'oracle.dbtools.role.autorest.APEXDEV.EMP'
    );
end;


以上で表EMPを、REST API経由で操作できるようになりました。

オブジェクトのRESTの有効化 - SQL Developer Webによる作業

Oracle APEXではなくSQL Developer Webから作業を行う場合は、UIが提供されていないため、Oracle REST Data Servicesが提供しているORDS.ENABLE_OBJECTプロシージャを呼び出すことで、オブジェクトのREST APIによる操作を有効にします。

SQL Developer Webにデータベース・ユーザーAPEXDEVにてサインインし、以下のプロシージャを実行します。

begin
    ORDS.ENABLE_OBJECT(
        p_enabled => TRUE,
        p_schema => 'APEXDEV',
        p_object => 'EMP',
        p_object_type => 'TABLE',
        p_object_alias => 'emp',
        p_auto_rest_auth => TRUE
    );
end;

続いてRESTのページを開いて、CLIENTSのタイルをクリックします。

OAuthクライアントapexdevの編集を実行します。

ロールのタブを開き、認可ロールoracle.dbtools.role.autorest.APEXDEV.EMPをクライアントapexdevに割り当て、保存をクリックします。


以上で、APEXから設定したのと同様に、表EMPをREST API経由で操作できるようになりました。


RESTデータ・ソースの登録


これからRESTデータ・ソースの設定を行います。以前の呼び名はWebソース・モジュールでした。

共有コンポーネントデータ・ソースに含まれるRESTデータ・ソースを開きます。


作成をクリックします。


RESTデータ・ソースの作成は、最初から行います。


RESTデータ・ソース・タイプとしてOracle REST Data Servicesを選択します。名前は任意です。ここではEMP in Ashburnとしています。URLエンドポイントは、REST対応ユーザーを有効にしたときに決められたエンドポイントURLにオブジェクト別名を加えたものです。

https://Autonomous Databaseのホスト.oraclecloudapps.com/ords/スキーマ別名/オブジェクト別名/

今回のオブジェクト別名はempとしているので、ホスト名を除いたパスは /ords/apexdev/emp/ になります。以上を設定して、に進みます。


リモート・サーバー、ベースURL、サービスURLパスは、先に設定したURLエンドポイントから導出されます。確認だけで、そのままへ進みます。


認証が必要ですONにします。資格証明はすでに作成済みの資格証明を設定します。今回の作業ではAPEXDEV at Ashburnになります。OAuthトークンURLは自動的に決まります。検出をクリックします。


取得したデータのプレビューが表示されます。プレビューが表示されれば、Web資格証明の設定やエンドポイントURLの構成に間違いはありません。内容を確認して、RESTデータソースの作成をクリックします。


作成したRESTデータ・ソースが一覧に表示されます。


以上で、RESTデータ・ソースが作成されました。

RESTデータ・ソースによる対話グリッドの作成


RESTデータ・ソースをソースとする対話グリッドのページを作成します。作成手順は一つ前のREST対応SQLをソースとする場合とほぼ同じですので、違う部分だけを記載します。

ページの名前は任意ですが、今回はRESTデータ・ソースとします。

ページ作成ウィザードを実行し、ページの名前やナビゲーション・メニューの指定を行います。最後にデータ・ソースを指定するページが開きます。

データ・ソースとしてRESTデータ・ソースを選択します。編集が有効ONとし、RESTデータ・ソースとして、作成済みのRESTデータ・ソース、今回の例ではEMP in Ashburnを選択します。主キー列が選択できるようになるので、EMPNO (Number)を選択し、作成をクリックします。


対話グリッドのページが作成されます。作成された対話グリッドのリージョンのソースを確認します。外部フィルタ外部並替え基準ローカル後処理の設定が追加されています。それぞれの機能については、オンライン・ヘルプを参照してください。

作成されたページを実行し、動作を確認します。


検索および行の挿入/更新/削除を行ってみましょう。操作感には大きな違いはありません。


RESTデータ・ソースの作成と、それを使用した対話グリッドの作成については以上で完了です。

次の記事が最後になります。RESTデータ・ソースの同期化を実装してみます。