Appel des services Web à partir d'Autonomous Database
Décrit les options d'appel des services Web à partir d'Autonomous Database.
Plusieurs options sont disponibles pour appeler des services Web à partir d'Autonomous Database, notamment les suivantes :
-
Utilisation des API REST
DBMS_CLOUD
: la fonctionDBMS_CLOUD.SEND_REQUEST
lance une demande HTTP, obtient la réponse et y met fin. Cette fonction fournit un workflow pour l'envoi d'une demande d'API REST cloud avec des arguments et renvoie une charge utile et un code de réponse. Pour plus d'informations, reportez-vous à Fonction et procédure SEND_REQUEST. -
Utilisation d'Oracle APEX : vous pouvez interagir avec les services Web de type SOAP et RESTful à partir d'APEX dans votre instance Autonomous Database. Reportez-vous à Utilisation des services Web avec Oracle APEX pour plus d'informations.
-
Utilisation de
UTL_HTTP
pour soumettre une demande à un site public : pour plus d'informations, reportez-vous à Soumission d'une demande HTTP à un hôte public. -
Utilisation de
UTL_HTTP
pour soumettre une demande à un site privé : pour plus d'informations, reportez-vous à soumission d'une demande HTTP à un hôte privé.Lorsque votre instance Autonomous Database se trouve sur une adresse privée, vous pouvez utiliser un portefeuille géré par le client avec des procédures dans
UTL_HTTP
,DBMS_LDAP
,UTL_SMTP
ouUTL_TCP
. Pour plus d'informations, reportez-vous à Appels externes à l'aide d'un portefeuille géré par le client.
Reportez-vous à Remarques sur le package PL/SQL pour Autonomous Database afin d'obtenir plus d'informations sur les restrictions relatives à UTL_HTTP
sur Autonomous Database.
Rubriques
- Soumission d'une demande HTTP à un hôte public
Fournit des détails sur l'utilisation deUTL_HTTP
pour soumettre une demande HTTP sur un hôte public. - Soumission d'une demande HTTP à un hôte privé
Décrit les étapes d'utilisation deUTL_HTTP
pour soumettre une demande HTTP sur un hôte privé. - Soumission d'une demande HTTP sur un site privé avec un proxy
Lorsque votre instance Autonomous Database se trouve sur une adresse privée, vous pouvez utiliser un proxy pour soumettre des demandes HTTP avecUTL_HTTP
. - Utilisation d'objets d'informations d'identification pour définir l'authentification HTTP
Décrit comment transmettre des objets d'informations d'identification à la procédureUTL_HTTP.SET_CREDENTIAL
. - Remarques relatives à la soumission de demandes HTTP avec Oracle APEX ou Database Actions
Lorsque vous utilisez la feuille de calcul SQL Oracle APEX ou Database Actions pour exécuter plusieurs commandes SQL séquentielles, les commandes peuvent être exécutées dans différentes sessions de base de données qui n'enregistrent pas l'état d'une instruction précédente. Ce comportement diffère des clients SQL de bureau tels que SQL*Plus et SQL Developer qui maintiennent une connexion persistante à la base de données.
Thème parent : Tâches
Soumission d'une demande HTTP à un hôte public
Fournit des détails sur l'utilisation de UTL_HTTP
pour soumettre une demande HTTP sur un hôte public.
Par exemple, pour soumettre une demande HTTP pour un hôte public www.example.com, créez une liste de contrôle d'accès pour l'hôte :
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;
Ensuite, soumettez la demande HTTP :
SELECT UTL_HTTP.REQUEST(url => 'https://www.example.com/') FROM dual;
Si votre instance Autonomous Database se trouve sur une adresse privée et que vous voulez que vos appels
UTL_HTTP
vers des hôtes publics soient soumis aux règles sortantes de votre VCN d'adresse privée, définissez la propriété de base de données ROUTE_OUTBOUND_CONNECTIONS
sur PRIVATE_ENDPOINT
.
Pour plus d'informations, reportez-vous à Sécurité améliorée pour les connexions sortantes avec des adresses privées.
Reportez-vous à Remarques sur le package PL/SQL pour Autonomous Database afin d'obtenir plus d'informations sur les restrictions relatives à UTL_HTTP
sur Autonomous Database.
Rubrique parent : Appel de services Web à partir d'Autonomous Database
Soumission d'une demande HTTP à un hôte privé
Décrit les étapes permettant d'utiliser UTL_HTTP
pour soumettre une demande HTTP sur un hôte privé.
Pour soumettre une demande à un hôte cible sur une adresse privée, l'hôte cible doit être accessible à partir du VCN Oracle Cloud Infrastructure de la base de données source. Par exemple, vous pouvez vous connecter à l'hôte cible dans les cas suivants :
-
La base de données source et l'hôte cible se trouvent dans le même VCN Oracle Cloud Infrastructure.
-
La base de données source et l'hôte cible se trouvent dans différents réseaux cloud virtuels Oracle Cloud Infrastructure couplés.
-
L'hôte cible est un réseau sur site connecté au VCN Oracle Cloud Infrastructure de la base de données source à l'aide de FastConnect ou d'un VPN.
Vous pouvez également effectuer des appels UTL_HTTP
avec un portefeuille géré par le client lorsque votre instance Autonomous Database se trouve sur une adresse privée. Pour plus d'informations, reportez-vous à Appels externes à l'aide d'un portefeuille géré par le client.
Pour effectuer une demande UTL_HTTP
vers une cible sur une adresse privée, procédez comme suit :
-
Créez une liste de contrôle d'accès pour l'hôte.
Exemple :
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; /
Comme indiqué dans cet exemple, lorsque vous créez une liste de contrôle d'accès pour l'hôte, indiquez le paramètre
private_target
avec la valeurTRUE
.Remarque
Si vous définissezROUTE_OUTBOUND_CONNECTIONS
surPRIVATE_ENDPOINT
, la définition du paramètreprivate_target
surTRUE
n'est pas requise dans cette API. Pour plus d'informations, reportez-vous à Sécurité améliorée pour les connexions sortantes avec des adresses privées. -
Soumettez la demande HTTP :
SELECT UTL_HTTP.REQUEST( url => 'https://www.example.com/', https_host => 'www.example.com') FROM dual;
Reportez-vous à Remarques sur le package PL/SQL pour Autonomous Database afin d'obtenir plus d'informations sur les restrictions relatives à UTL_HTTP
sur Autonomous Database.
Rubrique parent : Appel de services Web à partir d'Autonomous Database
Soumettre une demande HTTP à un site privé avec un proxy
Lorsque votre instance Autonomous Database se trouve sur une adresse privée, vous pouvez utiliser un proxy pour soumettre des demandes HTTP avec UTL_HTTP
.
Lorsque votre instance Autonomous Database se trouve sur une adresse privée, pour utiliser UTL_HTTP
avec un proxy cible, le proxy cible doit être accessible à partir du VCN Oracle Cloud Infrastructure de la base de données source.
Par exemple, vous pouvez vous connecter à l'aide d'un proxy dans les cas suivants :
-
La base de données source et le serveur proxy se trouvent dans le même VCN Oracle Cloud Infrastructure.
-
La base de données source et le serveur proxy se trouvent dans différents réseaux cloud virtuels Oracle Cloud Infrastructure couplés.
-
Le serveur proxy est un réseau sur site connecté au VCN Oracle Cloud Infrastructure de la base de données source à l'aide de FastConnect ou d'un VPN.
Vous pouvez également effectuer des appels UTL_HTTP
à l'aide d'un portefeuille géré par le client. Pour plus d'informations, reportez-vous à Faire des appels externes à l'aide d'un portefeuille géré par le client.
Pour utiliser un serveur proxy avec UTL_HTTP
, procédez comme suit :
Remarques relatives à la définition d'un serveur proxy avec UTL_HTTP.SET_PROXY
:
-
Les demandes
DBMS_CLOUD
n'honorent pas le serveur proxy défini avecUTL_HTTP.SET_PROXY
. Cela inclutDBMS_CLOUD.SEND_REQUEST
et tous les accès au stockage d'objet pour les tables externesDBMS_CLOUD
que vous définissez avecDBMS_CLOUD.CREATE_EXTERNAL_TABLE
,DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
ouDBMS_CLOUD.CREATE_HYBRID_PART_TABLE
. -
Les demandes
APEX_WEB_SERVICE
ne respectent pas le serveur proxy que vous avez défini avecUTL_HTTP.SET_PROXY
.
Reportez-vous à Remarques sur le package PL/SQL pour Autonomous Database afin d'obtenir plus d'informations sur les restrictions relatives à UTL_HTTP
sur Autonomous Database.
Rubrique parent : Appel de services Web à partir d'Autonomous Database
Utiliser des objets d'informations d'identification pour définir l'authentification HTTP
Explique comment transmettre des objets d'informations d'identification à la procédure UTL_HTTP.SET_CREDENTIAL
.
La procédure UTL_HTTP.SET_CREDENTIAL
définit les informations d'authentification HTTP dans l'en-tête de demande HTTP. Le serveur Web a besoin de ces informations pour autoriser la demande.
La procédure UTL_HTTP.SET_CREDENTIAL
vous permet de transmettre des objets d'informations d'identification pour définir l'authentification HTTP. Les objets d'informations d'identification sont des objets de schéma. Ils ne sont donc accessibles qu'aux utilisateurs dotés de privilèges et vous permettent de configurer des privilèges de niveau schéma pour contrôler les informations d'identification. La transmission d'objets d'informations d'identification est un moyen approprié et sécurisé de stocker et de gérer le nom utilisateur, le mot de passe et les clés à utiliser pour l'authentification.
La procédure UTL_HTTP.SET_CREDENTIAL
est une alternative sécurisée et pratique à la procédure UTL_HTTP.SET_AUTHENTICATION
.
Exemple
...
UTL_HTTP.SET_AUTHENTICATION (l_http_request, 'web_app_user', 'xxxxxxxxxxxx');
...
Comme indiqué dans l'exemple ci-dessus, lorsque vous appelez la procédure SET_AUTHENTICATION
, vous devez transmettre le nom utilisateur/mot de passe en clair dans le cadre des paramètres formels PL/SQL. Vous devrez peut-être intégrer le nom utilisateur/mot de passe dans différents scripts cron ou d'automatisation PL/SQL. La transmission de mots de passe en texte clair est un problème de conformité qui est résolu dans la procédure UTL_HTTP.SET_CREDENTIAL
.
Pour plus d'informations, reportez-vous à Procédure SET_AUTHENTICATION et à Procédure SET_AUTHENTICATION_FROM_WALLET.
Syntaxe UTL_HTTP.SET_CREDENTIAL
UTL_HTTP.SET_CREDENTIAL (
r IN OUT NOCOPY req,
credential IN VARCHAR2,
scheme IN VARCHAR2 DEFAULT 'Basic',
for_proxy IN BOOLEAN DEFAULT FALSE);
Exemple de transmission d'un objet d'informations d'identification dans la procédure SET_CREDENTIAL
:
-
Créez un objet d'informations d'identification :
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'HTTP_CRED', username => 'web_app_user', password => '<password>' ); END;
Cela crée un objet d'informations d'identification qui crée une paire nom utilisateur/mot de passe stockée.
Pour plus d'informations, reportez-vous à Procédure CREATE_CREDENTIAL.
Pour plus d'informations, reportez-vous à Spécification des informations d'identification de travail du planificateur.
-
Appelez la procédure
UTL_HTTP.SET_CREDENTIAL
: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;
Cet exemple crée d'abord une demande en appelant la procédure
BEGIN_REQUEST
et définit les informations d'authentification HTTP dans l'en-tête de demande HTTP en appelant la procédureSET_CREDENTIAL
. Le serveur Web a besoin de ces informations pour autoriser la demande. La valeurl_http_request
correspond à la demande HTTP,HTTP_CRED
au nom des informations d'identification etBASIC
au modèle d'authentification HTTP.
Pour plus d'informations, reportez-vous à UTL_HTTP.
Reportez-vous à Remarques sur le package PL/SQL pour Autonomous Database afin d'obtenir plus d'informations sur les restrictions relatives à UTL_HTTP
sur Autonomous Database.
Rubrique parent : Appel de services Web à partir d'Autonomous Database
Remarques relatives à la soumission de demandes HTTP avec Oracle APEX ou Database Actions
Lorsque vous utilisez Oracle APEX SQL Commands ou Database Actions SQL Worksheet pour exécuter plusieurs commandes SQL séquentielles, les commandes peuvent être exécutées dans différentes sessions de base de données qui n'enregistrent pas l'état d'une instruction précédente. Ce comportement diffère des clients SQL de bureau tels que SQL*Plus et SQL Developer qui maintiennent une connexion persistante à la base de données.
Les commandes SQL Oracle APEX et les soumissions de feuille de calcul SQL Database Actions à une instance Autonomous Database sont sans conservation de statut. Cela signifie que l'exécution d'instructions SQL et PL/SQL individuelles peut enregistrer l'état dans la mémoire de la base de données, par exemple lorsque vous soumettez une commande pour utiliser un "wallet", mais que l'état peut être effacé avant l'exécution de l'instruction suivante.
Consultez le tableau suivant pour connaître les étapes permettant de conserver l'état de la mémoire de la base de données entre les exécutions d'instruction pour les commandes SQL que vous soumettez à Autonomous Database.
Outils de commandes SQL | Soumettre des relevés en tant que bloc |
---|---|
Feuille de calcul SQL de Database Actions |
|
Commandes SQL Oracle APEX |
Les commandes SQL APEX prennent uniquement en charge l'exécution d'instructions individuelles. Pour exécuter plusieurs instructions, vous devez les encapsuler dans un bloc anonyme PL/SQL unique. Pour exécuter le bloc avec les commandes SQL APEX, cliquez sur Exécuter. |
Par exemple, utilisez le bloc de code suivant pour exécuter une commande utl_http.request()
qui utilise un portefeuille géré par le client :
SELECT utl_http.request(url => 'https://api.example.com/', wallet_path => 'file:path_to_wallet', wallet_password => 'password' ) FROM DUAL";
Comparez ceci à l'exécution avec deux instructions consécutives qui peuvent échouer si la commande utl_http.set_wallet()
et l'instruction utl_http.request()
sont exécutées individuellement, plutôt qu'en tant que bloc de code unique :
EXEC utl_http.set_wallet('file:WALLET_DIR/wallet.sso', 'password');
SELECT utl_http.request('https://api.example.com/') FROM DUAL;
Rubrique parent : Appel de services Web à partir d'Autonomous Database