LoginSignup
9
4

More than 3 years have passed since last update.

Oracle FunctionsでAPEXのRestful Serviceと連携

Last updated at Posted at 2019-07-23

Oracle Functionsって?という方はこちら

Oracle FunctionsでORDSのRESTfulサービスで定義されているRest Endpointと連携することができます。
なので自作したOracle Application Express (APEX)アプリのRestful Serviceと連携、そこから更に他のツールと連携することも可能という事です。

今回Oracle Functionsで、APEXのRestful Dataを操作してみます。

前提

・ATP(Autonomous Transaction Processing)をプロビジョニング
 ⇒arakiatptestというDB名にしています。
・ATPからOracle APEXをセットアップし自身のワークスペースを作成していること。
 ⇒testworkspaceというワークスペース名にしています。
・Oracle Functions開発、実行環境が構築されていること。
 ⇒・Oracle Functionsセットアップ

※こちらの手順で作成したATPは検証後、削除します。

APEX Restful Service設定

APEXログイン後、SQLワークショップ >RESTfulサービスより
「Register Schema to ORDS」 をクリック(新しいワークスペースの場合スキーマをORDSに登録する必要があります)。
キャプチ.PNG

スキーマ属性の保存

Schema Aliasに任意のスキーマ名を入れて「Save Schema Attributes」をクリック(ここではtestworkspaceという名前)。
キャプチ2.PNG

ORDS RESTfulサービスページが表示されます。
キャプチャ.PNG

Oracle APEXにプレインストールされたサンプルサービス「oracle.example.hr」
は従業員情報のリソースが提供されており、実体はjsonファイルとして格納されています。
これをエンドポイントを利用してOracle Funcitonsと連携し、操作することにします。

実際の中身を見てみます。
キャプチャ3.PNG
例えばサンプル内"employees"というテンプレート情報の"GET"ハンドラーには、
記載されたFull URL(RESTエンドポイント)でGETを実行した際のPL/SQLが記載されています。

ここでは、全従業員情報を取得するためのFULL URL(RESTエンドポイント)は以下となっています。
https://vhawxpz0akgqjtj-arakiatptest.adb.us-phoenix-1.oraclecloudapps.com/ords/testworkspace/hr/employees/

これを分割して詳しく説明すると、
インスタンス固有部分 ⇒ vhawxpz0akgqjtj-arakiatptest.adb.us-phoenix-1.oraclecloudapps.com
APEXワークスペース名 ⇒ testworkspace
残りのパスパラメータ ⇒ hr/employees/

Oracle Functions実行

必要なリソースを準備

今回は以下を使用します。
https://github.com/abhirockzz/fn-atp-ords-sample

ファンクション開発環境にてソースをクローン

git clone https://github.com/abhirockzz/fn-atp-ords-sample
cd fn-atp-ords-sample

エンドポイント設定

vi app.yaml
※以下編集。ORDS_REST_SERVICE_ENDPOINTに先ほどFull URL属性に記載されていた部分を記載します。
[変更前]
name: fn-atp-ords
config:
  ORDS_REST_SERVICE_ENDPOINT: <TO_BE_FILLED><img width="462" alt="キャプチャ1.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/7a5683c3-2b95-64b5-f076-19a083bb0743.png">

[変更後]
※エンドポイントのURLは/hr/まででOKです。
name: fn-atp-ords
config:
  ORDS_REST_SERVICE_ENDPOINT: https://vhawxpz0akgqjtj-arakiatptest.adb.us-phoenix-1.oraclecloudapps.com/ords/testworkspace/hr/

OCIコンソールでPhoenixリージョン、Oracle Functionsの画面に遷移します。
https://console.us-phoenix-1.oraclecloud.com/functions
Create Applicationより
キャプチャ1.PNG
NAME: fn-atp-ords
VCN: Fn用に作成したVCN
SUBNETS: PHX-AD-1から3まで選択
上記で「create」を押します。

ファンクションのデプロイ

fn list apps
※作成したファンクションが表示されます
NAME            ID
fn-atp-ords     ocid1.fnapp.oc1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

デプロイ(全ての起動をデプロイするコマンド)
fn -v deploy --all

Rest Dataの操作

全従業員を表示(jqで整えてます)
fn invoke fn-atp-ords read-emps | jq

{
  "items": [
    {
      "uri": {
        "$ref": "https://vhawxpz0akgqjtj-arakiatptest.adb.us-phoenix-1.oraclecloudapps.com/ords/testworkspace/hr/employees/7369"
      },
      "rn": 1,
      "empno": 7369,
      "ename": "SMITH",
      "job": "CLERK",
      "hiredate": "1980-12-17T00:00:00Z",
      "mgr": 7902,
      "sal": 800,
      "comm": null,
      "deptno": 20
    }
…(以下省略)

IDで該当する従業員を取得
echo -n '7654' | fn invoke fn-atp-ords read-emps | jq
{
  "empno": 7654,
  "ename": "MARTIN",
  "job": "SALESMAN",
  "mgr": 7698,
  "hiredate": "1981-09-28T00:00:00Z",
  "sal": 1500,
  "comm": 1400,
  "deptno": 30
}

Employeeのレコードを更新(7654)
echo -n '{"empno":7654,"ename":"ARAKI","job":"ENGINEER","mgr":7698,"hiredate":"1981-09-28T00:00:00Z","sal":1500,"comm":1400,"deptno":30}' | fn invoke fn-atp-ords update-emps

更新確認
echo -n '7654' | fn invoke fn-atp-ords read-emps | jq
{
  "empno": 7654,
  "ename": "ARAKI",
  "job": "ENGINEER",
  "mgr": 7698,
  "hiredate": "1981-09-28T00:00:00Z",
  "sal": 1500,
  "comm": 1400,
  "deptno": 30
}

Oracle FunctionsでORDSのREST Endpointを利用しOracleツールと連携すれば、かなり色々な使い方ができると思いました。

関連記事

・Oracle Functionsに関するメモ
・Oracle Functionsセットアップ
・Oracle FunctionsでTensorFlowによる画像分類
・Oracle FunctionsでEmail Deliveryと連携しメール送信
・Oracle FunctionsでObject Storage操作 (テキストを格納・取得+テキストをPDFに変換)
・Fn Project - Fn Server構築 (Oracle Linux7.6)
・Oracle FunctionsでOCI Go SDKを使いインスタンス操作

9
4
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
9
4