Oracle APEXでのWebサービスの使用

Autonomous DatabaseインスタンスのOracle APEXから、SOAPとRESTfulの両方のスタイルのWebサービスを操作できます。

Webサービスを使用すると、アプリケーションはWeb上でプラットフォームおよび言語に依存しない環境で相互に通信できます。典型的なWebサービスのシナリオでは、ビジネス・アプリケーションでHTTPプロトコルを使用して、指定したURLのサービスにリクエストを送信することがあります。サービスは、リクエストを受信すると、これを処理し、レスポンスを返します。通常、Webサービスは、シンプル・オブジェクト・アクセス・プロトコル(SOAP)またはRepresentational State Transfer (REST)アーキテクチャに基づいています。

APEX開発者は、RESTデータ・ソースを使用して、様々なRESTエンドポイントからデータ・サービスに宣言的にアクセスし、読取りと書込みの両方の操作を実行できます。Oracle APEXは、リモートRESTデータのスマート・キャッシュ・ルールのサポートに加えて、業界標準のSQLを使用してRESTデータ・ソースの結果を直接操作する独自の機能も提供します。

APEX_WEB_SERVICEパッケージを使用すると、PL/SQLを使用できるアプリケーション内の任意の場所でWebサービスと対話できるため、APEXと他のシステムを統合できます。このパッケージには、SOAPスタイルとRESTfulスタイルの両方のWebサービスをコールし、OAuth 2.0フローの実装を簡素化するプロシージャおよびファンクションが含まれています。

Oracle APEXを使用したプライベート・ホストへのHTTPリクエストの送信

Autonomous DatabaseインスタンスのOracle APEXからプライベート・ホストにHTTPリクエストを送信するには、いくつかの要件があります。

プライベート・エンドポイントまたはオンプレミス・ファイアウォールの背後にあるターゲット・ホストにリクエストを送信するには、ソース・データベースのOracle Cloud Infrastructure VCNからターゲット・ホストにアクセスできる必要があります:

  1. 「UTL_HTTPを使用したプライベート・ホストへのHTTPリクエストの送信」の説明に従って、エンドポイントがHTTPリクエストを送信するための前提条件を満たしていることを確認します。

  2. 目的のホストの次のアクセス制御リストをADMINとして追加します(private_targetパラメータに注意してください)。

    BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => 'www.example.com',
        ace => XS$ACE_TYPE(
          privilege_list => XS$NAME_LIST('http'),
          principal_name => APEX_APPLICATION.g_flow_schema_owner,
          principal_type => XS_ACL.ptype_db),
        private_target => true);
    END;
    /
ノート

ROUTE_OUTBOUND_CONNECTIONSデータベース・プロパティをPRIVATE_ENDPOINTに設定した場合、APEXからアクセスするために個々のホストに対してアクセス制御リストを定義する必要はありません。詳細は、プライベート・エンドポイントを使用したアウトバウンド接続のセキュリティの強化を参照してください。

Oracle APEXで顧客管理Walletを使用して外部コールを行う

Autonomous Database上のOracle APEXは、ほとんどのHTTPSエンドポイントで動作するOracle Walletで事前構成されています。あまり一般的でないSSL証明書または自己署名付きSSL証明書を使用するサーバーからREST APIを使用する場合、顧客管理ウォレットを構成できます。

Autonomous Database上のOracle APEXは、最も一般的な信頼できるルート証明書と中間SSL証明書が90を超えるOracle Walletを使用して事前構成されています。APEX_WEB_SERVICEパッケージは、アプリケーション開発者による追加構成なしで、このOracle Walletを自動的に利用します。

あまり一般的でないSSL証明書または自己署名付きSSL証明書を使用するサーバーからREST APIを使用する場合、顧客管理ウォレットを構成できます。まず、「外部コールで顧客管理Walletを使用するための前提条件」の構成およびデプロイメントの手順に従います。ウォレットがAutonomous Databaseにデプロイされたら、ウォレットを含むディレクトリ・オブジェクトのREADをAPEXプラットフォーム・スキーマにADMINとして付与します:

BEGIN
  execute immediate 'grant READ on directory WALLET_DIR to ' ||
    APEX_APPLICATION.g_flow_schema_owner;
END;

次に、APEX_WEB_SERVICE APIコールでウォレットを参照する場合は、通常のFILE:接頭辞のかわりにDIR:接頭辞を使用してください。たとえば:

l_resp := APEX_WEB_SERVICE.MAKE_REST_REQUEST(
  p_url         => 'https://www.example.com/',
  p_http_method => 'GET',
  p_wallet_path => 'DIR:WALLET_DIR'
);

このウォレットをAPEX管理サービスのOracle APEXインスタンス全体のデフォルトとして構成するには、「インスタンスの管理」→「インスタンス設定」→「Wallet」→「Walletパス」を選択するか、WALLET_PATHインスタンス・パラメータを設定します。

事前構成済ウォレットに切り替えるには、WALLET_PATHを空の値に設定します。

詳細は、Oracle APEX管理サービスへのアクセスを参照してください。

Oracle APEXを使用したWebプロキシを使用した外部コールの実行

Oracle APEXインスタンスでは、外部REST APIコールを行うためにアウトバウンドWebプロキシは必要ありません。プライベート・エンドポイントで構成されたAutonomous Databasesは、必要に応じてVCNにデプロイされたWebプロキシを使用できます。

Webプロキシを使用するには、次のアクセス制御リストをADMINとして定義します。

BEGIN
  DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
    host           => 'www-proxy.example.com',
    lower_port     => 80,
    ace => XS$ACE_TYPE( 
      privilege_list => XS$NAME_LIST('HTTP_PROXY'),
      principal_name => APEX_APPLICATION.g_flow_schema_owner,
      principal_type => XS_ACL.ptype_db),
    private_target => true);
END;
/

その後、APEX_WEB_SERVICE APIコールでWebプロキシを使用できます。

l_resp := APEX_WEB_SERVICE.MAKE_REST_REQUEST(
  p_url            => 'https://www.example.com/',
  p_http_method    => 'GET',
  p_proxy_override => 'www-proxy.example.com:80'
);

「共有コンポーネント」→「アプリケーション定義」→「プロパティ」ページで「プロキシ・サーバー」プロパティを設定するか、「インスタンスの管理」→「セキュリティ」→「インスタンス・プロキシ」からAPEX管理サービスのインスタンス・レベルでWebプロキシを構成することもできます。

Autonomous Databaseがパブリック・エンドポイントで構成されているときにWebプロキシを使用しようとすると、エラーが返されます:

ORA-01031: insufficient privileges

UTL_HTTP APIを使用する場合のプロキシの詳細は、「UTL_HTTPを使用したプライベート・ホストへのHTTPリクエストの送信」を参照してください。

詳細は、Oracle APEX管理サービスへのアクセスを参照してください。

Oracle APEXでWebサービスを使用するためのノート

Autonomous DatabaseインスタンスからOracle APEXでWebサービスを操作するためのノートを提供します。

Oracle APEXでWebサービスを操作する場合は、次の点に注意してください。

  • すべてのWebサービスは保護されている必要があります。デフォルト・ポート(443)ではHTTPSサービスのみがサポートされます。IPアドレスを介した接続は許可されません。

  • 各Autonomous Databaseインスタンスは、Oracle APEXからパブリック・エンドポイントへのアウトバウンドWebサービス・コールを許可するネットワーク・アクセス制御リスト(ACL)で事前構成されています。

  • APEX_WEB_SERVICEリクエストは、UTL_HTTP.SET_WALLET APIコールで設定したカスタム・ウォレットを受け入れません。

  • 24時間のローリング期間のAPEXワークスペースごとに、50,000のアウトバウンドWebサービス・リクエストのデフォルト制限があります。アウトバウンドWebサービス・コール数の制限に達すると、後続のリクエストで次のSQL例外が発生し、リクエストはブロックされます:

    ORA-20001: You have exceeded the maximum number of web service requests per workspace. Please contact your administrator.

    アウトバウンドWebサービス・リクエストのデフォルト制限は、MAX_WEBSERVICE_REQUESTSインスタンス・パラメータの値を設定するか、APEX管理サービスの「最大Webサービス・リクエスト」属性を更新することで増減できます。たとえば、制限を250,000に変更するには、SQLクライアントを使用してADMINとしてデータベースに接続し、次を実行します:

    BEGIN
      APEX_INSTANCE_ADMIN.SET_PARAMETER('MAX_WEBSERVICE_REQUESTS', '250000');
      COMMIT;
    END;
    /

さらに学習するには、次のURLを参照してください。