0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【OCI】Autonomous AI Databaseのデータ・アクションを使ってREST APIを作成してみる

0
Last updated at Posted at 2026-10-29

はじめに

今回はOracle Autonomous AI Database(ADB)のデータ・アクションを利用して、REST APIを作成してみたいと思います。

通常、データベースの情報を外部アプリケーションから利用する場合、APIを開発する必要がありますが、ADBではOracle REST Data Services(ORDS)を利用することで、データベースのテーブルやSQL、PL/SQLをREST APIとして公開できます。

また、ADBに標準で用意されているデータ・アクションを使えば、GUIからREST APIを作成できるため、比較的簡単にAPIを公開することができます。

今回はREST APIを作成し、OAuth 2.0による認証を設定した上で、実際にAPIを呼び出してデータの参照を行ってみます。

構成イメージ

image.png

■今回の検証の流れ

① 検証用テーブルの作成
② データ・アクションからREST APIを作成
③ OAuth 2.0の認証設定
④ アクセストークンの取得
⑤ REST APIによるデータの参照(POST)

■検証環境

項目 内容
クラウド Oracle Cloud Infrastructure(OCI)
データベース Oracle Autonomous AI Database(ADB)
REST API Oracle REST Data Services(ORDS)
管理ツール データ・アクション
認証方式 OAuth 2.0 Client Credentials

■今回の構成

今回の構成は以下のようになります。

REST API Client
      |
      | ① Access Token取得
      v
Oracle REST Data Services(ORDS)
      |
      | ② Access Token発行
      v
REST API Client
      |
      | ③ REST API呼び出し
      |    Authorization: Bearer <token>
      v
Oracle REST Data Services(ORDS)
      |
      | ④ SQL / PL/SQL実行
      v
Autonomous AI Database(ADB)
      |
      | ⑤ データ参照
      v
検証用テーブル

■参考ドキュメント

今回はORDSのOAuth 2.0機能を利用します。
OCI IAM Identity Domain側にOAuthアプリケーションを作成する構成ではありません。

◆目次

  1. 検証用テーブルの作成
  2. REST APIの作成
  3. OAuth 2.0の認証設定
  4. REST APIの動作検証
  5. REST APIを利用するメリット
  6. おわり

1. 検証用テーブルの作成

それでは早速、ADBにREST APIでアクセスするための検証用テーブルを作成します。
OCIコンソールから対象のADBを選択し、データ・アクションを起動します。
今回はREST APIを公開するためのデータベースユーザーを利用します。
なお、REST APIを利用するスキーマはORDSによるRESTアクセスが有効になっている必要があります。
今回はADMINで検証しますが、実際の利用では専用のアプリケーションスキーマを作成することをおすすめします。

[1] テーブルの作成

データ・アクションからSQLを選択します。

今回は以下のSQLを実行して検証用テーブルを作成します。

CREATE TABLE DEMO_ITEMS (
    ID NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    TITLE VARCHAR2(100),
    MEMO VARCHAR2(500),
    CREATED_AT TIMESTAMP DEFAULT SYSTIMESTAMP
);

テーブルには以下の4つのカラムを用意しました。

カラム 説明
ID レコードを識別するID
TITLE タイトル
MEMO メモ
CREATED_AT 登録日時

続いて、確認用のデータを登録します。

INSERT INTO DEMO_ITEMS (TITLE, MEMO)
VALUES ('TEST01', 'REST API TEST');

COMMIT;

登録が完了したらSELECT文で確認します。

SELECT * FROM DEMO_ITEMS;

image.png

これで準備完了です。


2. REST APIの作成

続いて、データ・アクションからREST APIを作成してみます。
データ・アクションにはREST APIを管理するための「RESTワークショップ」が用意されています。
RESTワークショップでは主に以下の3つを定義することでREST APIを作成できます。

項目 説明
Module REST APIの基本パスを定義
Template リソースのURIを定義
Handler HTTPメソッドと実行処理を定義

例えば、今回作成するREST APIは以下のような構成になります。

Module
  api01
   |
   +-- Template
         search/
          |
          +-- POST Handler
                SELECT文を実行

[1] RESTワークショップを開く

データ・アクションのメニューからRESTを選択します。
RESTワークショップが表示されたら、モジュールを選択します。

image.png

image.png

[2] モジュールの作成

「モジュールの作成」を選択して新しいモジュールを作成します。

今回は以下のように設定します。

モジュール名 : api01
ベース・パス : /api01/
権限によって保護済み:使用可能な権限

モジュールはREST APIの基本となるURLを定義するものです。

image.png

入力したら作成ボタンを押します。
image.png

登録したモジュールが表示されない場合は画面を更新(F5)してください。
image.png

[3] テンプレートの作成

続いて作成したモジュールにテンプレートを追加します。
今回は以下のように設定します。

URIテンプレート : search

これでREST APIのURLは以下のような構成になります。

https://<ADBホスト名>/ords/admin/api01/search

image.png

image.png

image.png

image.png

[4] POSTハンドラの作成

まずはデータを参照するためのPOST APIを作成します。
作成したテンプレートからハンドラを追加します。

以下のように設定します。

メソッド : POST
ソース: (以下)
DECLARE
    l_json CLOB;
BEGIN
    SELECT json_object(
               'id' VALUE id,
               'title' VALUE title,
               'memo' VALUE memo,
               'created_at' VALUE TO_CHAR(created_at,
                                          'YYYY-MM-DD"T"HH24:MI:SS')
           )
    INTO l_json
    FROM demo_items
    WHERE id = :id;

    htp.p(l_json);

    :status_code := 200;

EXCEPTION
    WHEN NO_DATA_FOUND THEN
        :status_code := 404;
        htp.p('{"message":"Data not found"}');
END;

この設定によって、REST APIがPOSTリクエストを受け取ると、指定したSELECT文が実行されます。
実行結果はJSON形式で返されます。

image.png

image.png

コードを入力したら作成ボタンを実行します。
image.png

これでPOSTのREST APIが作成できました。


3. OAuth 2.0の認証設定

続いて、作成したREST APIにOAuth 2.0による認証を設定します。
ORDSではOAuth 2.0を利用してREST APIへのアクセスを制御できます。
今回はClient Credentials方式を使用します。

Client Credentials方式は、Client IDとClient Secretを使用してアクセストークンを取得する方式です。

REST APIを呼び出す際にアクセストークンを指定することで、認証されたクライアントからのアクセスのみを許可できます。

[1] ロールの作成

RESTワークショップのセキュリティメニューからロールを選択します。
新しいロールを作成し、以下の名前を設定します。

ロール名 : api_role

ロールはREST APIにアクセスできるクライアントを制御するために利用します。

image.png

image.png

image.png

image.png

[2] 権限の作成

続いて権限を作成します。

今回、権限は以下のように設定します。
保護対象のモジュールには、先ほど作成したapi01を指定します。
権限はREST APIへのアクセスを制限するための設定です。

[特恵定義]タブ
ラベル : api_privilege
名前 : api_privilege
説明 : api_privilege

[ロール]タブ
ロール : api_role

[保護されたモジュール]タブ
モジュール: api01

ロールと権限を組み合わせることで、特定のロールを持つクライアントだけが対象のREST APIへアクセスできるようになります。

image.png

image.png

image.png

image.png

image.png

[3] OAuthクライアントの作成

続いてOAuthクライアントを作成します。
今回は以下のように設定します。
作成したOAuthクライアントに必要なロールを割り当てます。

[特恵定義]タブ
付与タイプ : CLIENT_CRED
名前 : api_client
説明 : api_client
サポート電子メール : (ご自身のメールアドレス)

[ロール]タブ
ロール : RESTful Services
       : api_role

image.png

image.png

image.png

image.png

image.png

作成が完了したら、Client IDとClient Secretを書き留めておきます。

Client ID : xxxxxxxxxx
Client Secret : xxxxxxxxxx

これらの情報はアクセストークンを取得する際に利用します。
特にClient Secretは認証情報となるため、外部に公開しないよう注意してください。

Client IDはクリップボードに保存できます。
image.png

Client Secretは初回のみ表示されますが、ローテーションで再発行できます。
image.png


4. REST APIの動作検証

それでは実際にREST APIを呼び出してみます。
今回はREST APIクライアントからHTTPリクエストを送信して動作を確認します。
最初にOAuth 2.0のアクセストークンを取得します。

[1] アクセストークンの取得

ORDSではOAuth 2.0のToken Endpointが用意されています。
今回のエンドポイントは以下のようになります。
(今回はスキーマ名がadminになっています)

https://<ADBホスト名>/ords/admin/oauth/token

以下のリクエストを送信します。

[Method]
POST

[Endpoint]
https://<ADBホスト名>/ords/admin/oauth/token

[Header]
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <Base64認証値>

[Body]
grant_type=client_credentials

Authorizationヘッダーには、Client IDとClient Secretをコロンで連結した値をBase64エンコードして指定します。

例えば以下のようになります。

Client ID     : ABCDE
Client Secret : 12345

この場合、連結する文字列は以下になります。

ABCDE:12345

Base64エンコードすると以下になります。

QUJDREU6MTIzNDU=

したがって、Authorizationヘッダーには以下を指定します。

Authorization: Basic QUJDREU6MTIzNDU=

なお、Base64は暗号化ではありません。実際のClient Secretは安全に管理してください。
正常に実行されると、以下のようなレスポンスが返ってきます。

{
    "access_token": "xxxxxxxxxxxxxxxx",
    "token_type": "bearer",
    "expires_in": 3600
}

ここで取得したaccess_tokenをREST APIの呼び出しに使用します。

[2] POST APIによるデータ参照

それでは先ほど作成したPOST APIを呼び出してみます。
エンドポイントは以下になります。

https://<ADBホスト名>/ords/admin/api01/search

以下のリクエストを送信します。

[Method]
POST

[Endpoint]
https://<ADBホスト名>/ords/admin/api01/search

[Header]
Content-Type: application/json
Authorization: Bearer <アクセストークン>

[Body]
{
    "id": 1
}

先ほど取得したアクセストークンをAuthorizationヘッダーに設定します。
正常に実行されると、データベースに登録されている情報がJSON形式で返されます。
レスポンスは以下のようなイメージになります。

{
  "id": 1,
  "title": "TEST01",
  "memo": "REST API TEST",
  "created_at": "2026-10-27T08:49:38"
}

このように、SQLの実行結果をREST APIから取得できました。


5. REST APIを利用するメリット

今回の検証では、ADBのデータ・アクションからREST APIを作成しました。
個人的には、SQLやPL/SQLを利用して比較的簡単にREST APIを公開できる点が便利だと感じました。
例えば、以下のような場面で活用できると思います。

  • 外部アプリケーションからADBのデータを参照する
  • 外部システムからADBへデータを登録する
  • SQLやPL/SQLをREST APIとして公開する
  • 他のクラウドサービスとのデータ連携に利用する

通常は別途APIサーバーを開発する必要があるケースでも、ORDSを利用することでデータベース側に定義した処理をREST APIとして公開できます。

また、OAuth 2.0を利用することで、REST APIへのアクセスを認証・認可によって制御できます。

ただし、REST APIとして公開するSQLやPL/SQLには適切な権限設定や入力値の検証が必要です。
特に更新系のAPIを公開する場合は、アクセスできるクライアントを必要最小限に制限することが重要になります。


おわり

今回はOracle Autonomous AI Databaseのデータ・アクションを利用してREST APIを作成してみました。
データ・アクションのRESTワークショップを利用することで、SQLやPL/SQLをREST APIとして公開できることが確認できました。
また、OAuth 2.0による認証設定を組み合わせることで、アクセストークンを利用したREST APIへのアクセスも実現できました。

今回はPOSTによるデータ参照を試しましたが、ORDSではPUTやDELETEなどのHTTPメソッドにも対応しているため、用途に応じてさまざまなREST APIを作成できます。

ADBのデータを外部アプリケーションやサービスと連携する場合に、活用できる機能だと思います。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?