Oracle APEXでWebサービスを使用
Webサービスは、プラットフォーム中立で言語非依存の環境でWebを介してアプリケーションが相互に対話できるようにします。 通常のwebサービス・シナリオでは、ビジネス・アプリケーションが、HTTPプロトコルを使用して、特定のURLにあるサービスに対してリクエストを送信します。 サービスはリクエストを受信し、それを処理してレスポンスを返します。 通常、Webサービスは、Simple Object Access Protocol (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 APEXで顧客管理Walletを使用して外部コールを行う
Autonomous Database上のOracle APEXは、ほとんどのHTTPSエンドポイントで動作するOracle Walletで事前構成されています。 あまり一般的でないSSL証明書または自己署名付きSSL証明書を使用するサーバーからREST APIを使用する場合、顧客管理ウォレットを構成できます。 - Oracle APEXでのWebプロキシを使用した外部コールの実行
Oracle APEXインスタンスでは、外部REST APIコールを行うためにアウトバウンドwebプロキシは必要ありません。 プライベート・エンドポイントで構成されたAutonomous Databaseは、必要に応じてVCNにデプロイされたwebプロキシを使用できます。 - Oracle APEXでのWebサービスの使用に関するノート
Autonomous DatabaseインスタンスからOracle APEXでwebサービスを操作するためのノートを提供します。
Oracle APEXを使用したプライベート・ホストへのHTTPリクエストの送信
Autonomous DatabaseインスタンスのOracle APEXからプライベート・ホストにHTTPリクエストを送信するには、いくつかの要件があります。
プライベート・エンドポイントまたはオンプレミス・ファイアウォールの背後にあるターゲット・ホストにリクエストを送信するには、ソース・データベースのOracle Cloud Infrastructure VCNからターゲット・ホストにアクセスできる必要があります:
-
ここで説明するように、エンドポイントがHTTPリクエストを送信するための前提条件を満たしていることを確認: UTL_HTTPを使用したプライベート・ホストへのHTTPリクエストの送信。
-
目的のホストの次のアクセス制御リストを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でのWebサービスの使用
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'
);
「インスタンスの管理」→「インスタンス設定」→「Wallet」→「Walletパス」を選択するか、WALLET_PATH
インスタンス・パラメータを設定して、このウォレットを「APEX管理サービス」のOracle APEXインスタンス全体のデフォルトとして構成することもできます。
事前構成済ウォレットに切り替えるには、WALLET_PATH
を空の値に設定します。
詳細については、「Oracle APEX管理サービスへのアクセス」を参照してください。
親トピック: Oracle APEXでのWebサービスの使用
Oracle APEXを使用したWebプロキシを使用した外部コールの作成
Oracle APEXインスタンスでは、外部REST APIコールを行うためにアウトバウンドwebプロキシは必要ありません。 プライベート・エンドポイントで構成されたAutonomous Databaseは、必要に応じて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'
);
webプロキシは、「共有コンポーネント」→「アプリケーション定義」→「プロパティ」ページで「プロキシ・サーバー」プロパティを設定するか、「インスタンスの管理」→「セキュリティ」→「インスタンス・プロキシ」から「APEX管理サービス」のインスタンス・レベルでアプリケーション・レベルで構成することもできます。
Autonomous Databaseがパブリック・エンドポイントで構成されているときにwebプロキシを使用しようとすると、エラーが返されます:
ORA-01031: insufficient privileges
UTL_HTTP
APIを使用する場合のプロキシの詳細は、「UTL_HTTPを使用したプライベート・ホストへのHTTPリクエストの送信」を参照してください。
詳細については、「Oracle APEX管理サービスへのアクセス」を参照してください。
親トピック: Oracle APEXでのWebサービスの使用
Oracle APEXでのWebサービスの使用に関するノート
Autonomous DatabaseインスタンスからOracle APEXでwebサービスを操作するためのノートを提供します。
Oracle APEXでwebサービスを操作する場合は、次の点に注意してください:
-
すべてのwebサービスは保護されている必要があります。 HTTPSサービスのみがデフォルト・ポート(443)でサポートされます。 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; /
詳細は、次を参照してください:
-
「Oracle APEX APIリファレンス」のAPEX_WEB_SERVICE
-
「Oracle APEXアプリケーション・ビルダー・ユーザー・ガイド」の「RESTデータ・ソースの管理」
親トピック: Oracle APEXでのWebサービスの使用