Oracle Functions에서 APEX의 Restful Service와 협력

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에 등록해야 함).


스키마 속성 저장



Schema Alias에 임의의 스키마 이름을 넣고 "Save Schema Attributes"를 클릭 (여기서는 testworkspace라는 이름).


ORDS RESTful 서비스 페이지가 표시됩니다.


Oracle APEX에 사전 설치된 샘플 서비스 "oracle.example.hr"
는 직원 정보 리소스를 제공하고 엔터티는 json 파일로 저장됩니다.
이것을 엔드포인트를 이용하여 Oracle Funcitons와 연계하고 조작하기로 합니다.

실제 내용을 살펴 보겠습니다.

예를 들면 샘플내 "employees"라고 하는 템플릿 정보의 "GET"핸들러에는,
기재된 Full URL(REST 엔드포인트)에서 GET를 실행했을 때의 PL/SQL이 기재되어 있습니다.

여기에서는 모든 직원 정보를 취득하기 위한 FULL URL(REST 엔드포인트)은 다음과 같습니다.
htps // v는 wxpz0 아 kgqjtj 아라키아 tp st. 오 db. 우-sp x-1. 오라 cぇ cぉ 우다 ps. 코 m / 오 rds / 테 s와 rks 파세 / hr / 에 mp ぉ 이에 s /

이것을 나누고 자세히 설명하면,
인스턴스별 부분 ⇒ vhawxpz0akgqjtj-arakiatptest.adb.us-phoenix-1.oraclecloudapps.com
APEX 작업 공간 이름 ⇒ testworkspace
나머지 경로 매개변수 ⇒ hr/employees/

Oracle Functions 실행



필요한 리소스 준비



이번에는 다음을 사용합니다.
htps : // 기주 b. 코 m / 아 b 히로 ck · f 음 - tp - rds - mp ぇ

기능 개발 환경에서 소스 복제
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 화면으로 전환합니다.
htps : // 이런. 우-sp x-1. 오 c c c d d. 코 m / 훙 c 치온 s
Create Application에서

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 Linux 7.6)
· Oracle Functions에서 OCI Go SDK를 사용한 인스턴스 작업

좋은 웹페이지 즐겨찾기