Webservices mit Oracle APEX verwenden

Sie können mit Webservices im SOAP- und RESTful-Stil von Oracle APEX in Ihrer Autonomous Database-Instanz interagieren.

Web-Services ermöglichen es Anwendungen, über das Internet in einer plattformunabhängigen, sprachunabhängigen Umgebung miteinander zu interagieren. In einem typischen Webserviceszenario sendet eine Geschäftsanwendung mit dem HTTP-Protokoll eine Anforderung an einen Service unter einer bestimmten URL. Der Service empfängt die Anforderung, verarbeitet sie und gibt eine Antwort zurück. Webservices basieren normalerweise auf SOAP-(Simple Object Access Protocol-) oder REST-(Representational State Transfer-)Architekturen.

Mit REST-Datenquellen können APEX-Entwickler deklarativ von einer Vielzahl von REST-Endpunkten auf Datenservices zugreifen, sodass Lese- und Schreibvorgänge möglich sind. Neben der Unterstützung von Smart Caching-Regeln für Remote-REST-Daten bietet Oracle APEX auch die einzigartige Möglichkeit, die Ergebnisse von REST-Datenquellen direkt mit branchenüblichem SQL zu bearbeiten.

Mit dem Package APEX_WEB_SERVICE können Sie andere Systeme in APEX integrieren, indem Sie mit Webservices interagieren können, wo auch immer Sie PL/SQL in Ihrer Anwendung verwenden können. Das Package enthält Prozeduren und Funktionen zum Aufrufen von SOAP- und RESTful-Webservices und zur Vereinfachung der Implementierung von OAuth 2.0-Abläufen.

HTTP-Anforderung mit Oracle APEX an einen privaten Host weiterleiten

Es gibt mehrere Anforderungen, um eine HTTP-Anforderung an einen privaten Host von Oracle APEX in Ihrer Autonomous Database-Instanz weiterzuleiten.

Um eine Anforderung an einen Zielhost auf einem privaten Endpunkt oder hinter On-Premise-Firewalls weiterzuleiten, muss der Zielhost über das Oracle Cloud Infrastructure-VCN der Quelldatenbank zugänglich sein:

  1. Stellen Sie sicher, dass der Endpunkt die Voraussetzungen zum Weiterleiten einer HTTP-Anforderung erfüllt, wie hier beschrieben: Senden Sie eine HTTP-Anforderung an einen privaten Host mit UTL_HTTP.

  2. Fügen Sie die folgende Access Control-Liste für den gewünschten Host als ADMIN hinzu (beachten Sie den Parameter 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;
    /
Hinweis

Wenn Sie die Datenbankeigenschaft ROUTE_OUTBOUND_CONNECTIONS auf PRIVATE_ENDPOINT setzen, müssen Sie keine Access-Control-Listen für einzelne Hosts definieren, um von APEX aus darauf zugreifen zu können. Weitere Informationen finden Sie unter Erweiterte Sicherheit für ausgehende Verbindungen mit privaten Endpunkten.

Externe Anrufe mit einem vom Kunden verwalteten Wallet mit Oracle APEX tätigen

Oracle APEX auf Autonomous Database ist mit einem Oracle Wallet vorkonfiguriert, das mit den meisten HTTPS-Endpunkten funktioniert. Wenn Sie REST-APIs von Servern konsumieren möchten, die weniger allgemeine oder selbstsignierte SSL-Zertifikate verwenden, können Sie ein vom Kunden verwaltetes Wallet konfigurieren.

Oracle APEX auf Autonomous Database ist mit einem Oracle Wallet vorkonfiguriert, das mehr als 90 der häufigsten vertrauenswürdigen Root- und Zwischen-SSL-Zertifikate enthält. Das APEX_WEB_SERVICE-Package nutzt dieses Oracle Wallet automatisch ohne zusätzliche Konfiguration von Anwendungsentwicklern.

Wenn Sie REST-APIs von Servern konsumieren möchten, die weniger allgemeine oder selbstsignierte SSL-Zertifikate verwenden, können Sie ein vom Kunden verwaltetes Wallet konfigurieren. Befolgen Sie zunächst die Konfigurations- und Deployment-Anweisungen unter Voraussetzungen für die Verwendung eines vom Kunden verwalteten Wallets mit externen Aufrufen. Nachdem das Wallet in Autonomous Database bereitgestellt wurde, erteilen Sie READ für das Verzeichnisobjekt, das das Wallet enthält, dem APEX-Plattformschema als ADMIN:

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

Wenn Sie das Wallet als Nächstes in APEX_WEB_SERVICE-API-Aufrufen referenzieren, achten Sie darauf, das Präfix DIR: anstelle des üblichen Präfix FILE: zu verwenden. Beispiel:

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

Sie können dieses Wallet auch als Standard für die gesamte Oracle APEX-Instanz in APEX-Administrationsservices konfigurieren, indem Sie "Instanz verwalten → Instanzeinstellungen → Wallet → Wallet-Pfad" auswählen oder den Instanzparameter WALLET_PATH festlegen.

Um zum vorkonfigurierten Wallet zurückzukehren, setzen Sie WALLET_PATH auf einen leeren Wert.

Weitere Informationen finden Sie unter Auf Oracle APEX Administration Services zugreifen.

Externe Anrufe mit einem Webproxy mit Oracle APEX tätigen

Für Ihre Oracle APEX-Instanz ist kein ausgehender Webproxy erforderlich, um externe REST-APIs aufzurufen. Autonome Datenbanken, die mit einem privaten Endpunkt konfiguriert sind, können bei Bedarf einen im VCN bereitgestellten Webproxy verwenden.

Um einen Webproxy zu verwenden, definieren Sie die folgende Access Control-Liste als 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;
/

Dann können Sie den Webproxy in APEX_WEB_SERVICE-API-Aufrufen verwenden:

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'
);

Sie können einen Webproxy auch auf Anwendungsebene konfigurieren, indem Sie die Eigenschaft "Proxyserver" auf der Seite "Gemeinsame Komponenten → Anwendungsdefinition → Eigenschaften" oder auf Instanzebene in APEX-Administrationsservices unter "Instanz verwalten → Sicherheit → Instanzproxy" festlegen.

Wenn Sie versuchen, einen Webproxy zu verwenden, wenn Autonomous Database mit einem öffentlichen Endpunkt konfiguriert ist, wird ein Fehler zurückgegeben:

ORA-01031: insufficient privileges

Weitere Informationen zu Proxys bei Verwendung der UTL_HTTP-API finden Sie unter HTTP-Anforderung an einen privaten Host mit UTL_HTTP weiterleiten.

Weitere Informationen finden Sie unter Auf Oracle APEX Administration Services zugreifen.

Hinweise zur Verwendung von Webservices mit Oracle APEX

Stellt Notizen für die Arbeit mit Webservices in Oracle APEX aus einer Autonomous Database-Instanz bereit.

Beachten Sie Folgendes, wenn Sie mit Webservices in Oracle APEX arbeiten:

  • Alle Webservices müssen gesichert werden. Auf dem Standardport (443) werden nur HTTPS-Services unterstützt. Verbindungen über IP-Adressen sind nicht zulässig.

  • Jede Autonomous Database-Instanz ist mit einer Network Access Control-Liste (ACL) vorkonfiguriert, um ausgehende Webserviceaufrufe von Oracle APEX an öffentliche Endpunkte zuzulassen.

  • Bei APEX_WEB_SERVICE-Anforderungen wird das benutzerdefinierte Wallet, das Sie mit UTL_HTTP.SET_WALLET-API-Aufrufen festgelegt haben, nicht berücksichtigt.

  • Es gibt ein Standardlimit von 1.000 ausgehenden Webserviceanforderungen pro APEX-Workspace in einem rollierenden Zeitraum von 24 Stunden (dies gilt für neue Datenbanken, einige ältere Datenbanken haben möglicherweise ein größeres Limit). Wenn das Limit für ausgehende Webserviceaufrufe erreicht ist, wird die folgende SQL-Ausnahme bei der nachfolgenden Anforderung ausgelöst und die Anforderung blockiert:

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

    Sie können das Standardlimit für ausgehende Webserviceanforderungen erhöhen oder entfernen, indem Sie einen Wert für den Instanzparameter MAX_WEBSERVICE_REQUESTS festlegen oder das Attribut "Maximale Webserviceanforderungen" in APEX Administration Services aktualisieren. Beispiel: Um den Grenzwert auf 250.000 zu ändern, melden Sie sich mit einem SQL-Client bei der Datenbank als ADMIN an, und führen Sie Folgendes aus:

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

Weitere Informationen finden Sie unter