Webservices aus Autonomous Database aufrufen
Beschreibt Optionen zum Aufrufen von Webservices aus Autonomous Database.
Es gibt eine Reihe von Optionen zum Aufruf von Webservices aus Autonomous Database, darunter:
-
DBMS_CLOUD
-REST-APIs verwenden: Die FunktionDBMS_CLOUD.SEND_REQUEST
startet eine HTTP-Anforderung, ruft die Antwort ab und beendet die Antwort. Diese Funktion bietet einen Workflow zum Senden einer Cloud-REST-API-Anforderung mit Argumenten, und die Funktion gibt einen Antwortcode und eine Payload zurück. Weitere Informationen finden Sie unter SEND_REQUEST Funktion und Prozedur. -
Oracle APEX verwenden: Sie können sowohl mit SOAP- als auch mit RESTful-Webservices über APEX in Ihrer Autonomous Database-Instanz interagieren. Weitere Informationen finden Sie unter Webservices mit Oracle APEX verwenden.
-
Mit
UTL_HTTP
eine Anforderung an eine öffentliche Site weiterleiten: Weitere Informationen finden Sie unter HTTP-Anforderung an einen öffentlichen Host weiterleiten. -
Mit
UTL_HTTP
eine Anforderung an eine private Site weiterleiten: Weitere Informationen finden Sie unter HTTP-Anforderung an einen privaten Host weiterleiten.Wenn sich Ihre Autonomous Database-Instanz auf einem privaten Endpunkt befindet, können Sie ein vom Kunden verwaltetes Wallet mit Prozeduren in
UTL_HTTP
,DBMS_LDAP
,UTL_SMTP
oderUTL_TCP
verwenden. Weitere Informationen finden Sie unter Externe Anrufe mit einem vom Kunden verwalteten Wallet tätigen.
Informationen zu Einschränkungen für UTL_HTTP
finden Sie unter Hinweise zum PL/SQL-Package für Autonomous Database.
Themen
- HTTP-Anforderung an einen öffentlichen Host weiterleiten
Gibt Details zur Weiterleitung einer HTTP-Anforderung mitUTL_HTTP
auf einem öffentlichen Host an. - HTTP-Anforderung an einen privaten Host weiterleiten
Hier werden die Schritte zum Weiterleiten einer HTTP-Anforderung mitUTL_HTTP
auf einem privaten Host beschrieben. - HTTP-Anforderung an private Site mit einem Proxy weiterleiten
Wenn sich Ihre Autonomous Database-Instanz auf einem privaten Endpunkt befindet, können Sie HTTP-Anforderungen mit einem Proxy anUTL_HTTP
weiterleiten. - Zugangsdatenobjekte zum Festlegen der HTTP-Authentifizierung verwenden
Hier wird beschrieben, wie Zugangsdatenobjekte an die ProzedurUTL_HTTP.SET_CREDENTIAL
übergeben werden. - Hinweise zum Weiterleiten von HTTP-Anforderungen mit Oracle APEX oder Database Actions
Wenn Sie mehrere sequenzielle SQL-Befehle mit Oracle APEX SQL Commands oder Database Actions SQL Worksheet ausführen, können die Befehle in verschiedenen Datenbanksessions ausgeführt werden, die den Status einer vorherigen Anweisung nicht speichern. Dieses Verhalten unterscheidet sich von Desktop-SQL-Clients wie SQL*Plus und SQL Developer, die eine persistente Verbindung zur Datenbank aufrechterhalten.
Übergeordnetes Thema: Aufgaben
HTTP-Anforderung an einen öffentlichen Host weiterleiten
Enthält Details zur Verwendung von UTL_HTTP
zum Weiterleiten einer HTTP-Anforderung an einen öffentlichen Host.
Beispiel: Um eine HTTP-Anforderung für einen öffentlichen Host www.example.com weiterzuleiten, erstellen Sie eine Access Control-Liste für den Host:
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'www.example.com',
ace => xs$ace_type( privilege_list => xs$name_list('http'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db));
END;
Leiten Sie dann die HTTP-Anforderung weiter:
SELECT UTL_HTTP.REQUEST(url => 'https://www.example.com/') FROM dual;
Wenn sich Ihre Autonomous Database-Instanz auf einem privaten Endpunkt befindet und Ihre
UTL_HTTP
-Aufrufe an öffentliche Hosts den Egress-Regeln Ihres privaten Endpunkt-VCN unterliegen sollen, setzen Sie die Datenbankeigenschaft ROUTE_OUTBOUND_CONNECTIONS
auf PRIVATE_ENDPOINT
.
Weitere Informationen finden Sie unter Erweiterte Sicherheit für ausgehende Verbindungen mit privaten Endpunkten.
Informationen zu Einschränkungen für UTL_HTTP
finden Sie unter Hinweise zum PL/SQL-Package für Autonomous Database.
Übergeordnetes Thema: Webservices aus Autonomous Database aufrufen
HTTP-Anforderung an einen privaten Host weiterleiten
Beschreibt die Schritte zum Weiterleiten einer HTTP-Anforderung mit UTL_HTTP
auf einem privaten Host.
Um eine Anforderung an einen Zielhost auf einem privaten Endpunkt weiterzuleiten, muss der Zielhost über das Oracle Cloud Infrastructure-VCN der Quelldatenbank zugänglich sein. Beispiel: Sie können in:
-
Die Quelldatenbank und der Zielhost befinden sich in demselben Oracle Cloud Infrastructure-VCN.
-
Die Quelldatenbank und der Zielhost befinden sich in verschiedenen Oracle Cloud Infrastructure-VCNs, die gekoppelt sind.
-
Der Zielhost ist ein On-Premise-Netzwerk, das über FastConnect oder VPN mit dem Oracle Cloud Infrastructure-VCN der Quelldatenbank verbunden ist.
Sie können auch UTL_HTTP
-Aufrufe mit einem vom Kunden verwalteten Wallet ausführen, wenn sich Autonomous Database auf einem privaten Endpunkt befindet. Weitere Informationen finden Sie unter Externe Anrufe mit einem vom Kunden verwalteten Wallet tätigen.
So erstellen Sie eine UTL_HTTP
-Anforderung an ein Ziel auf einem privaten Endpunkt:
-
Erstellen Sie eine Access Control-Liste für den Host.
Beispiele:
BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.example.com', ace => xs$ace_type( privilege_list => xs$name_list('http'), principal_name => 'ADMIN', principal_type => xs_acl.ptype_db), private_target => TRUE); END; /
Wie in diesem Beispiel dargestellt, geben Sie beim Erstellen einer Access Control-Liste für den Host den Parameter
private_target
mit dem WertTRUE
an.Hinweis
Wenn SieROUTE_OUTBOUND_CONNECTIONS
aufPRIVATE_ENDPOINT
setzen, ist es in dieser API nicht erforderlich, den Parameterprivate_target
aufTRUE
zu setzen. Weitere Informationen finden Sie unter Erweiterte Sicherheit für ausgehende Verbindungen mit privaten Endpunkten. -
Leiten Sie die HTTP-Anforderung weiter:
SELECT UTL_HTTP.REQUEST( url => 'https://www.example.com/', https_host => 'www.example.com') FROM dual;
Informationen zu Einschränkungen für UTL_HTTP
finden Sie unter Hinweise zum PL/SQL-Package für Autonomous Database.
Übergeordnetes Thema: Webservices aus Autonomous Database aufrufen
HTTP-Anforderung mit einem Proxy an private Site weiterleiten
Wenn sich Ihre Autonomous Database-Instanz auf einem privaten Endpunkt befindet, können Sie HTTP-Anforderungen mit einem Proxy mit UTL_HTTP
weiterleiten.
Wenn sich Ihre Autonomous Database-Instanz auf einem privaten Endpunkt befindet, muss der Zielproxy über das Oracle Cloud Infrastructure-VCN der Quelldatenbank zugänglich sein, um UTL_HTTP
mit einem Zielproxy zu verwenden.
Sie können sich beispielsweise in folgenden Fällen mit einem Proxy anmelden:
-
Die Quelldatenbank und der Proxyserver befinden sich in demselben Oracle Cloud Infrastructure-VCN.
-
Die Quelldatenbank und der Proxyserver befinden sich in verschiedenen Oracle Cloud Infrastructure-VCNs, die gekoppelt sind.
-
Der Proxyserver ist ein On-Premise-Netzwerk, das mit FastConnect oder VPN mit dem Oracle Cloud Infrastructure-VCN der Quelldatenbank verbunden ist.
Sie können UTL_HTTP
-Aufrufe auch mit einem vom Kunden verwalteten Wallet ausführen. Weitere Informationen finden Sie unter Externe Anrufe mit einem vom Kunden verwalteten Wallet tätigen.
So verwenden Sie einen Proxyserver mit UTL_HTTP
:
Hinweise zum Festlegen eines Proxyservers mit UTL_HTTP.SET_PROXY
:
-
DBMS_CLOUD
-Anforderungen entsprechen nicht dem Proxyserver, den Sie mitUTL_HTTP.SET_PROXY
festlegen. Dazu gehörenDBMS_CLOUD.SEND_REQUEST
und der gesamte Objektspeicherzugriff für externeDBMS_CLOUD
-Tabellen, die Sie mitDBMS_CLOUD.CREATE_EXTERNAL_TABLE
,DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
oderDBMS_CLOUD.CREATE_HYBRID_PART_TABLE
definieren. -
Bei
APEX_WEB_SERVICE
-Anforderungen wird der Proxyserver, den Sie mitUTL_HTTP.SET_PROXY
festgelegt haben, nicht berücksichtigt.
Informationen zu Einschränkungen für UTL_HTTP
finden Sie unter Hinweise zum PL/SQL-Package für Autonomous Database.
Übergeordnetes Thema: Webservices aus Autonomous Database aufrufen
Zugangsdatenobjekte zum Festlegen der HTTP-Authentifizierung verwenden
Beschreibt, wie Zugangsdatenobjekte an die Prozedur UTL_HTTP.SET_CREDENTIAL
übergeben werden.
Die Prozedur UTL_HTTP.SET_CREDENTIAL
legt HTTP-Authentifizierungsinformationen im HTTP-Anforderungsheader fest. Der Webserver benötigt diese Informationen, um die Anforderung zu autorisieren.
Mit der Prozedur UTL_HTTP.SET_CREDENTIAL
können Sie Zugangsdatenobjekte übergeben, um die HTTP-Authentifizierung festzulegen. Zugangsdatenobjekte sind Schemaobjekte. Daher können nur privilegierte Benutzer auf sie zugreifen, und Sie können Berechtigungen auf Schemaebene konfigurieren, um auf die Zugangsdaten zuzugreifen. Das Übergeben von Zugangsdatenobjekten ist eine geeignete und sichere Möglichkeit zum Speichern und Verwalten von Benutzername/Kennwort/Schlüssel, die für die Authentifizierung verwendet werden sollen.
Die UTL_HTTP.SET_CREDENTIAL
-Prozedur ist eine sichere und praktische Alternative zur UTL_HTTP.SET_AUTHENTICATION
-Prozedur.
Beispiel
...
UTL_HTTP.SET_AUTHENTICATION (l_http_request, 'web_app_user', 'xxxxxxxxxxxx');
...
Wie im obigen Beispiel gezeigt, müssen Sie beim Aufrufen der Prozedur SET_AUTHENTICATION
den Benutzernamen/das Kennwort als Teil der formalen PL/SQL-Parameter in Klartext übergeben. Möglicherweise müssen Sie den Benutzernamen/das Kennwort in verschiedene PL/SQL-Automatisierungs- oder Cron-Skripte einbetten. Das Übergeben von Klartextpasswörtern ist ein Complianceproblem, das in der Prozedur UTL_HTTP.SET_CREDENTIAL
behoben wird.
Weitere Informationen finden Sie unter Prozedur SET_AUTHENTICATION und Prozedur SET_AUTHENTICATION_FROM_WALLET.
UTL_HTTP.SET_CREDENTIAL
-Syntax
UTL_HTTP.SET_CREDENTIAL (
r IN OUT NOCOPY req,
credential IN VARCHAR2,
scheme IN VARCHAR2 DEFAULT 'Basic',
for_proxy IN BOOLEAN DEFAULT FALSE);
Beispiel für die Übergabe eines Zugangsdatenobjekts in der Prozedur SET_CREDENTIAL
:
-
Erstellen Sie ein Zugangsdatenobjekt:
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'HTTP_CRED', username => 'web_app_user', password => '<password>' ); END;
Dadurch wird ein Zugangsdatenobjekt erstellt, das ein gespeichertes Benutzername/Kennwort-Paar erstellt.
Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.
Weitere Informationen finden Sie unter Zugangsdaten für Scheduler-Jobs angeben.
-
Rufen Sie die Prozedur
UTL_HTTP.SET_CREDENTIAL
auf:DECLARE l_http_request UTL_HTTP.REQ; BEGIN l_http_request := UTL_HTTP.BEGIN_REQUEST('https://www.example.com/v1/dwcsdev/NAME/dwcs_small_xt1.csv'); UTL_HTTP.SET_CREDENTIAL (l_http_request, 'HTTP_CRED','BASIC'); ... END;
In diesem Beispiel wird zunächst eine Anforderung erstellt, indem die Prozedur
BEGIN_REQUEST
aufgerufen wird, und HTTP-Authentifizierungsinformationen werden im HTTP-Anforderungsheader durch Aufrufen der ProzedurSET_CREDENTIAL
festgelegt. Der Webserver benötigt diese Informationen, um die Anforderung zu autorisieren. Der Wertl_http_request
ist die HTTP-Anforderung,HTTP_CRED
ist der Zugangsdatenname undBASIC
ist das HTTP-Authentifizierungsschema.
Weitere Informationen finden Sie unter UTL_HTTP.
Informationen zu Einschränkungen für UTL_HTTP
finden Sie unter Hinweise zum PL/SQL-Package für Autonomous Database.
Übergeordnetes Thema: Webservices aus Autonomous Database aufrufen
Hinweise zum Weiterleiten von HTTP-Anforderungen mit Oracle APEX oder Database Actions
Wenn Sie mit Oracle APEX SQL Commands oder Database Actions SQL Worksheet mehrere sequenzielle SQL-Befehle ausführen, können die Befehle in verschiedenen Datenbanksessions ausgeführt werden, die den Status einer vorherigen Anweisung nicht speichern. Dieses Verhalten unterscheidet sich von Desktop-SQL-Clients wie SQL*Plus und SQL Developer, die eine persistente Verbindung zur Datenbank aufrechterhalten.
Die Weiterleitungen der SQL-Arbeitsblätter für Oracle APEX SQL Commands und Database Actions an eine Autonomous Database-Instanz sind zustandslos. Das bedeutet, dass die Ausführung einzelner SQL- und PL/SQL-Anweisungen den Status im Datenbankspeicher speichern kann, z.B. wenn Sie einen Befehl zur Verwendung eines Wallets übermitteln, der Status jedoch möglicherweise gelöscht wird, bevor Sie die nächste Anweisung ausführen.
In der folgenden Tabelle finden Sie die Schritte zum Beibehalten des Datenbankspeicherstatus zwischen Anweisungsausführungen für SQL-Befehle, die Sie an Autonomous Database weiterleiten.
SQL-Befehlstool | Anweisungen als Block weiterleiten |
---|---|
Datenbankaktionen - SQL-Arbeitsblatt |
|
Oracle APEX SQL-Befehle |
APEX SQL Commands unterstützt nur die Ausführung einzelner Anweisungen. Wenn Sie mehrere Anweisungen ausführen möchten, müssen Sie die Anweisungen in einem einzelnen anonymen PL/SQL-Block umbrechen. Um den Block mit APEX SQL-Befehlen auszuführen, klicken Sie auf Ausführen. |
Beispiel: Verwenden Sie den folgenden Codeblock, um einen utl_http.request()
-Befehl auszuführen, der ein vom Kunden verwaltetes Wallet verwendet:
SELECT utl_http.request(url => 'https://api.example.com/', wallet_path => 'file:path_to_wallet', wallet_password => 'password' ) FROM DUAL";
Vergleichen Sie dies mit zwei aufeinanderfolgenden Anweisungen, die möglicherweise nicht erfolgreich ausgeführt werden, wenn der Befehl utl_http.set_wallet()
und die Anweisung utl_http.request()
einzeln und nicht als einzelner Codeblock ausgeführt werden:
EXEC utl_http.set_wallet('file:WALLET_DIR/wallet.sso', 'password');
SELECT utl_http.request('https://api.example.com/') FROM DUAL;
Übergeordnetes Thema: Webservices aus Autonomous Database aufrufen