2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LiveLabs:ORDS: Build Powerful, Secure RESTful ORDS APIs for your Oracle Autonomous Databaseの実施メモ(後編)

Last updated at Posted at 2025-08-29

本記事は、以下の後編の位置付けです。

LiveLabsでやってることの概要

  • AutoRESTでテーブルをAPIで公開するステップ(前編)
  • ビジネスロジックをAPIで公開するステップ(後編:この記事)

実施メモ

RESTの手動設定(SQL文の実行)

以下のSQL文を追加

CREATE OR REPLACE PROCEDURE RETURN_COUNT (
    P_INPUT  IN VARCHAR2,
    P_OUTPUT OUT NUMBER
) IS
BEGIN
    SELECT
        COUNT(*)
    INTO P_OUTPUT
    FROM
        CSV_DATA
    WHERE
        COL2 = P_INPUT;

END RETURN_COUNT;
/

SQL Developer Webからスクリプトを実行
image.png

以下SQLを実行

DECLARE
    L_OUTPUT NUMBER;
BEGIN
    RETURN_COUNT(P_INPUT => 'a1', P_OUTPUT => L_OUTPUT);
    DBMS_OUTPUT.PUT_LINE(L_OUTPUT);
END;
/

image.png

SQL文をRESTで公開

モジュール作成

Database Actions/RESTを選択

image.png
image.png

モジュールを選択
image.png

モジュールの作成を選択
image.png

モジュールの作成画面が起動される
image.png

以下を入力・選択の上、作成を選択
モジュール名: com.oracle.livelab.livelab-api
ベース・パス: livelab-api
権限によって保護済: 被保護

image.png

(参考)実際に実行されるコード

--  DEFINE MODULE
BEGIN
    ORDS.DEFINE_MODULE(
        p_module_name => 'com.oracle.livelab.livelab-api',
        p_base_path => '/livelab-api/',
        p_items_per_page=> 25,
        p_status => 'PUBLISHED',
        p_comments=> ''
    );
    COMMIT;
END;
/

テンプレート作成

テンプレートを作成を選択
image.png

URIテンプレートに以下を入力の上、右下の作成を選択
sqlreport/:id

image.png

(参考)実際に実行されるコード

--  DEFINE TEMPLATE
BEGIN
    ORDS.DEFINE_TEMPLATE(
        p_module_name => 'com.oracle.livelab.livelab-api',
        p_pattern => 'sqlreport/:id',
        p_priority => 0,
        p_etag_type => 'HASH',
        p_comments => ''
    );
    COMMIT;
END;
/

SQL Handler作成

ハンドラの作成を選択
image.png

ソースに以下を入力の上、右下の作成を選択
select * from csv_data where col2 = :id

image.png

(参考)実際に実行されるコード

-- DEFINE HANDLER
BEGIN
    ORDS.DEFINE_HANDLER(
        p_module_name => 'com.oracle.livelab.livelab-api',
        p_pattern => 'sqlreport/:id',
        p_method => 'GET',
        p_source_type => ords.source_type_collection_feed,
        p_source => 'select * from csv_data where col2 = :id',
        p_items_per_page => 25,
        p_comments => ''
    );
    COMMIT;
END;
/

REST APIを実行

文の実行を選択
image.png

a1と入力
image.png

ブラウザから実行(URLに以下を入力)
https://sya6vphk3pzlkhq-dw4ai.adb.ap-tokyo-1.oraclecloudapps.com/ords/admin/livelab-api/sqlreport/a1

image.png

ビジネスロジック(PL/SQL Procedure)をRESTで公開

モジュールから、先程作成した以下を選択
image.png

テンプレートの作成を選択
com.oracle.livelab.livelab-api
image.png

URIテンプレートに以下を入力の上、右下の作成を選択

image.png

ハンドラの作成を選択

bizlogic
image.png

以下を入力の上、右下の作成を選択
メソッド: POST
ソース:

BEGIN
    return_count(p_input => :id, p_output => :output);
end;

image.png

(参考)実際に実行されるコード

-- DEFINE HANDLER
BEGIN
    ORDS.DEFINE_HANDLER(
        p_module_name => 'com.oracle.livelab.livelab-api',
        p_pattern => 'bizlogic',
        p_method => 'POST',
        p_source_type => ords.source_type_plsql,
        p_source => 'BEGIN
    return_count(p_input => :id, p_output => :output);
end;',
        p_items_per_page => 25,
        p_comments => ''
    );
    COMMIT;
END;

パラメータの作成
画面真ん中のParametersを選択の上、右下のパラメータの作成を選択

image.png

以下を入力の上、右下の作成を選択
パラメータ名: output
バインド変数名: output
ソースタイプ: レスポンス
パラメータ・タイプ: INT
アクセスメソッド: 出力

image.png

(参考)実際に実行されるコード

-- DEFINE PARAMETER
BEGIN
    ORDS.DEFINE_PARAMETER(
        p_module_name => 'com.oracle.livelab.livelab-api',
        p_pattern => 'bizlogic',
        p_method => 'POST',
        p_name => 'output',
        p_bind_variable_name => 'output',
        p_source_type => 'RESPONSE',
        p_access_method => 'OUT',
        p_comments => '',
        p_param_type => 'INT'
    );
    COMMIT; 
END;

以下のような表示になっていることを確認
image.png

ORDS APIを用いたテストの実施

bizlogicを選択
image.png

cURLコマンドの取得を選択
image.png

+ボタンを選択してバインド変数を以下のとおり入力する

表示されたコマンドをコピーする
image.png

バインド変数を以下のとおり入力する
id: a1
output: Null

image.png

コマンドをコピーする
image.png

コンソールなどからコピーしたコマンドを実行する

curl --location --request POST \
'https://sya6vphk3pzlkhq-dw4ai.adb.ap-tokyo-1.oraclecloudapps.com/ords/admin/livelab-api/bizlogic' \
--header 'Content-Type: application/json' \
--data-binary '{
  "id": "a1",
  "output": "" 
}'

以下アウトプットとなっているか確認する
{"output":8204}%

OpenAI Viewの確認

ハンバーガーメニュー → OpenAPIビューを選択
image.png

POST /bizlogicの右側のボタンを選択する

image.png

「試す」を選択する
image.png

OpenAPIでの出力
image.png

image.png

(参考)PostmanでOpenAPIファイルをインポートする
image.png

image.png

image.png

image.png

image.png

REST endpoinsのセキュア化

ここでは、以下を実施する

  • OAuth2 Tokenの作成
  • Secure REST Endpoints
  • セキュアなエンドツーエンドの流れをテスト

REST Endpointへのセキュアロールの作成

Database Actions - RESTを選択
image.png

セキュリティ -> ロールを選択
image.png

「ロールの作成」を選択
image.png

ロール名に「oracle.livelabs.role.admin」を入力のうえ、「作成」を選択
image.png

(参考)実際に実行されるコード


BEGIN
    ORDS.CREATE_ROLE(
        P_ROLE_NAME => 'oracle.livelabs.role.admin'
    );
    COMMIT;
END;

権限の作成

セキュリティ -> 権限を選択

image.png

「権限の作成」を選択

image.png

以下内容を入力

  • ラベル: Livelabs REST Privilege
  • 名前: oracle.livelabs.privilege.admin
  • 説明: Livelabs Privilege for Business Logic REST Services

ロールを選択

image.png

「oracle.livelabs.privilege.admin」を選択
image.png

保護されたモジュールを選択
image.png

「com.oracle.livelab.livelab-api」を選択
image.png

右下の「作成」を選択
image.png

(参考)実際に実行されるコード

DECLARE
L_PRIV_ROLES owa.vc_arr;
L_PRIV_PATTERNS owa.vc_arr;
L_PRIV_MODULES owa.vc_arr;
BEGIN
L_PRIV_ROLES( 1 ) := 'oracle.livelabs.role.admin';
L_PRIV_MODULES( 1 ) := 'com.oracle.livelab.livelab-api';
ORDS.DEFINE_PRIVILEGE(
    P_PRIVILEGE_NAME => 'oracle.livelabs.privilege.admin',
    P_ROLES => L_PRIV_ROLES,
    P_PATTERNS =>  L_PRIV_PATTERNS,
    P_MODULES => L_PRIV_MODULES,
    P_LABEL => 'Livelabs REST Privilege',
    P_DESCRIPTION => 'Livelabs Privilege for Business Logic REST Services',
    P_COMMENTS=> ''
);
COMMIT;
END;

OAuthクライアントの作成

セキュリティ -> 「OAuthクライアント」を選択
image.png

「OAuthクライアントの作成」を選択
image.png

以下内容を入力

↑ サポートURIは、authrorization errorが起きたときにリダイレクトされるURI

「ロール」を選択
image.png

「oracle.livelabs.privilege.admin」を選択
image.png

「権限」を選択
image.png

「oracle.livelabs.privilege.admin」を選択のうえ、右下の「作成」を選択
image.png

(参考)実際に実行されるコード

BEGIN
    L_CLIENT_CREDS := ORDS_METADATA.ORDS_SECURITY.REGISTER_CLIENT(
        P_NAME => 'oauthclient',
        P_GRANT_TYPE => 'client_credentials',
        P_SUPPORT_EMAIL => 'support@support.com',
        P_DESCRIPTION => 'Security on my REST Service',
        P_CLIENT_SECRET => ORDS_CONSTANTS.OAUTH_CLIENT_SECRET_DEFAULT ,
        P_PRIVILEGE_NAMES => 'oracle.livelabs.privilege.admin',
        P_ORIGINS_ALLOWED => '',
        P_REDIRECT_URI => '',
        P_SUPPORT_URI => 'https://www.oracle.com/rest/'
    );
    ORDS_METADATA.ORDS_SECURITY.GRANT_CLIENT_ROLE(
        P_CLIENT_NAME => 'oauthclient',
        P_ROLE_NAME => 'oracle.livelabs.role.admin'
    );
    COMMIT;
END;

クライアント・シークレットが表示される
後で利用するため、このシークレットをメモしておく

image.png

oauthclientが作成されていることを確認
image.png

モジュール -> 「編集」を選択
「権限によって保護済」のところに、自動的に「oracle.livelabs.privilege.admin」が入力されていることを確認
image.png

Bearerトークンの取得

「最近使用したオブジェクト」からAuth Client - oauthclient(CLIENT_CRED) -> 「Bearerトークンの取得」を選択

image.png

上記でコピーしたコマンドに、先ほどコピーしたSecretを埋め込み実行
image.png

テスト

まずは、Tokenを設定せずにcurlアクセス

% curl --location --request POST \
'https://sya6vphk3pzlkhq-dw4ai.adb.ap-tokyo-1.oraclecloudapps.com/ords/admin/livelab-api/bizlogic' \
--header 'Content-Type: application/json' \
--data-binary '{
  "id": "a1",
  "output": "<VALUE>"
}'

{
    "code": "Unauthorized",
    "message": "Unauthorized",
    "type": "tag:oracle.com,2020:error/Unauthorized",
    "instance": "tag:oracle.com,2020:ecid/2cd118bda79e07cb3df7447164796f94"
}%                                              

次に先程取得したトークンを埋め込んでcurlアクセス
埋め込むトークンは以下の形式
--oauth2-bearer "[TOKEN]"

image.png

上記のとおり、トークンをREST APIに埋め込むことで、想定どおりのアウトプットが帰ってくるようになる。

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?