Appeler des services Web à partir d'une base de données autonome basée sur l'IA
Décrit les options pour appeler des services Web à partir d'une base de données d'IA autonome.
Il existe un certain nombre d'options pour appeler des services Web à partir de Autonomous AI Database, notamment :
-
Utiliser les API REST
DBMS_CLOUD: La fonctionDBMS_CLOUD.SEND_REQUESTcommence une demande HTTP, obtient la réponse et met fin à la réponse. Cette fonction fournit un flux de travail pour envoyer une demande d'API REST en nuage avec des arguments et retourne un code de réponse et des données utiles. Pour plus d'informations, voir SEND_REQUEST Fonction et procédure. -
Utiliser Oracle APEX : Vous pouvez interagir avec les services Web de style SOAP et RESTful à partir d'APEX dans votre instance de base de données autonome avec intelligence artificielle. Pour plus d'informations, voir Utiliser des services Web avec Oracle APEX.
-
Utilisez
UTL_HTTPpour soumettre une demande à un site public : Voir Soumettre une demande HTTP à un hôte public pour plus d'informations. -
Utilisez
UTL_HTTPpour soumettre une demande à un site privé : Voir Soumettre une demande HTTP à un hôte privé pour plus d'informations.Lorsque votre instance de base de données IA autonome se trouve sur un point d'extrémité privé, vous pouvez utiliser un portefeuille géré par le client avec des procédures dans
UTL_HTTP,DBMS_LDAP,UTL_SMTPouUTL_TCP. Pour plus d'informations, voir Appels externes à l'aide d'un portefeuille géré par le client.
Voir Notes de l'ensemble PL/SQL pour Autonomous AI Database pour plus d'informations sur les restrictions pour UTL_HTTP pour Autonomous AI Database.
Rubriques
- Soumettre une demande HTTP à un hôte public
Fournit des détails sur l'utilisation deUTL_HTTPpour soumettre une demande HTTP sur un hôte public. - Soumettre une demande HTTP à un hôte privé
Décrit les étapes à suivre pour utiliserUTL_HTTPpour soumettre une demande HTTP sur un hôte privé. - Soumettre une demande HTTP à un site privé avec un mandataire
Lorsque votre instance de base de données IA autonome se trouve sur un point d'extrémité privé, vous pouvez utiliser un mandataire pour soumettre des demandes HTTP avecUTL_HTTP. - Utiliser des objets de données d'identification pour définir l'authentification HTTP
Décrit comment transmettre des objets de données d'identification à la procédureUTL_HTTP.SET_CREDENTIAL. - Notes pour la soumission de demandes HTTP avec Oracle APEX ou Database Actions
Lorsque vous utilisez les commandes SQL Oracle APEX ou la feuille de calcul SQL Database Actions pour exécuter plusieurs commandes SQL séquentielles, les commandes peuvent s'exécuter dans différentes sessions de base de données qui n'enregistrent pas l'état d'un énoncé précédent. Ce comportement diffère des clients SQL de bureau tels que SQL*Plus et SQL Developer qui conservent une connexion persistante à la base de données.
Rubrique parent : Tâches
Soumettre 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;Soumettez ensuite la demande HTTP :
SELECT UTL_HTTP.REQUEST(url => 'https://www.example.com/') FROM dual;Si votre instance de base de données d'intelligence artificielle autonome se trouve sur un point d'extrémité privé et que vous souhaitez que vos appels
UTL_HTTP aux hôtes publics soient soumis aux règles de trafic sortant du VCN de votre point d'extrémité privé, réglez la propriété de base de données ROUTE_OUTBOUND_CONNECTIONS à PRIVATE_ENDPOINT.
Pour plus d'informations, voir Sécurité améliorée pour les connexions sortantes à l'aide de points d'extrémité privés.
Voir Notes de l'ensemble PL/SQL pour Autonomous AI Database pour plus d'informations sur les restrictions pour UTL_HTTP pour Autonomous AI Database.
Soumettre une demande HTTP à un hôte privé
Décrit les étapes à suivre pour utiliser UTL_HTTP pour soumettre une demande HTTP sur un hôte privé.
Pour soumettre une demande à un hôte cible sur un point d'extrémité privé, 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 lorsque :
-
La base de données source et l'hôte cible se trouvent tous les deux 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 en nuage virtuels Oracle Cloud Infrastructure qui sont appariés.
-
L'hôte cible est un réseau sur place connecté au VCN Oracle Cloud Infrastructure de la base de données source à l'aide de FastConnect ou d'un RPV.
Vous pouvez également effectuer des appels UTL_HTTP avec un portefeuille géré par le client lorsque votre base de données Autonomous AI Database se trouve sur un point d'extrémité privé. Pour plus d'informations, voir Appels externes à l'aide d'un portefeuille géré par le client.
Pour effectuer une demande UTL_HTTP à une cible sur un point d'extrémité privé :
-
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 illustré dans cet exemple, lorsque vous créez une liste de contrôle d'accès pour l'hôte, spécifiez le paramètre
private_targetavec la valeurTRUE.Note
Si vous réglezROUTE_OUTBOUND_CONNECTIONSàPRIVATE_ENDPOINT, le réglage du paramètreprivate_targetàTRUEn'est pas requis dans cette API. Pour plus d'informations, voir Sécurité améliorée pour les connexions sortantes à l'aide de points d'extrémité privés. -
Soumettez la demande HTTP :
SELECT UTL_HTTP.REQUEST( url => 'https://www.example.com/', https_host => 'www.example.com') FROM dual;
Voir Notes de l'ensemble PL/SQL pour Autonomous AI Database pour plus d'informations sur les restrictions pour UTL_HTTP pour Autonomous AI Database.
Soumettre une demande HTTP à un site privé avec un mandataire
Lorsque votre instance de base de données IA autonome se trouve sur un point d'extrémité privé, vous pouvez utiliser un mandataire pour soumettre des demandes HTTP avec UTL_HTTP.
Lorsque votre instance de base de données d'intelligence artificielle autonome se trouve sur un point d'extrémité privé, pour utiliser UTL_HTTP avec un mandataire cible, le mandataire 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 mandataire lorsque :
-
La base de données source et le serveur mandataire se trouvent tous les deux dans le même VCN Oracle Cloud Infrastructure.
-
La base de données source et le serveur mandataire se trouvent dans différents réseaux en nuage virtuels Oracle Cloud Infrastructure appariés.
-
Le serveur mandataire est un réseau sur place connecté au VCN Oracle Cloud Infrastructure de la base de données source à l'aide de FastConnect ou d'un RPV.
Vous pouvez également effectuer des appels UTL_HTTP à l'aide d'un portefeuille géré par le client. Pour plus d'informations, voir Appels externes à l'aide d'un portefeuille géré par le client.
Pour utiliser un serveur mandataire avec UTL_HTTP :
Notes pour définir un serveur mandataire avec UTL_HTTP.SET_PROXY :
-
Les demandes
DBMS_CLOUDne respectent pas le serveur mandataire que vous avez défini avecUTL_HTTP.SET_PROXY. Cela inclutDBMS_CLOUD.SEND_REQUESTet tous les accès au stockage d'objets pour les tables externesDBMS_CLOUDque vous définissez avecDBMS_CLOUD.CREATE_EXTERNAL_TABLE,DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEouDBMS_CLOUD.CREATE_HYBRID_PART_TABLE. -
Les demandes
APEX_WEB_SERVICEne respectent pas le serveur mandataire que vous avez défini avecUTL_HTTP.SET_PROXY.
Voir Notes de l'ensemble PL/SQL pour Autonomous AI Database pour plus d'informations sur les restrictions pour UTL_HTTP pour Autonomous AI Database.
Utiliser des objets de données d'identification pour définir l'authentification HTTP
Décrit comment transmettre des objets de données 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 la 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 de données d'identification pour définir l'authentification HTTP. Les objets de données d'identification sont des objets de schéma. Par conséquent, ils ne sont accessibles que par des utilisateurs dotés de privilèges et vous permettent de configurer des privilèges au niveau du schéma pour contrôler les données d'identification. La transmission d'objets de données d'identification est un moyen approprié et sécurisé de stocker et de gérer le nom d'utilisateur/mot de passe/clés à utiliser pour l'authentification.
La procédure UTL_HTTP.SET_CREDENTIAL est une alternative sûre 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 texte clair dans le cadre des paramètres formels PL/SQL. Vous devrez peut-être intégrer le nom utilisateur/mot de passe dans divers scripts d'automatisation PL/SQL ou cron. La transmission de mots de passe en texte clair est un problème de conformité qui est traité dans la procédure UTL_HTTP.SET_CREDENTIAL.
Pour plus d'informations, voir 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 pour transmettre un objet de données d'identification dans la procédure SET_CREDENTIAL :
-
Créez un objet de données d'identification :
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'HTTP_CRED', username => 'web_app_user', password => '<password>' ); END;Cela crée un objet de données d'identification qui crée une paire nom utilisateur/mot de passe stocké.
Pour plus d'informations, voir ProcédureCREATE_CREDENTIAL.
Pour plus d'informations, voir Spécification des données d'identification de la tâche du programmateur.
-
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_REQUESTet définit les informations d'authentification HTTP dans l'en-tête de la demande HTTP en appelant la procédureSET_CREDENTIAL. Le serveur Web a besoin de ces informations pour autoriser la demande. La valeurl_http_requestest la demande HTTP,HTTP_CREDest le nom des données d'identification etBASICest le modèle d'authentification HTTP.
Pour plus d'informations, voir UTL_HTTP.
Voir Notes de l'ensemble PL/SQL pour Autonomous AI Database pour plus d'informations sur les restrictions pour UTL_HTTP pour Autonomous AI Database.
Notes pour la soumission de demandes HTTP avec Oracle APEX ou Database Actions
Lorsque vous utilisez les commandes SQL Oracle APEX ou la feuille de calcul SQL Database Actions pour exécuter plusieurs commandes SQL séquentielles, ces 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 conservent une connexion persistante à la base de données.
Les commandes SQL d'Oracle APEX et les soumissions de feuille de calcul SQL Database Actions à une instance de base de données d'IA autonome sont sans état. 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 d'utilisation d'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 à suivre pour conserver l'état de mémoire de la base de données entre les exécutions d'énoncés pour les commandes SQL que vous soumettez à Autonomous AI Database.
| Outil de commande SQL | Soumettre les relevés en tant que bloc |
|---|---|
| Feuille de calcul SQL 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 des 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 cela à l'exécution avec deux énoncés consécutifs qui pourraient échouer si la commande utl_http.set_wallet() et l'énoncé utl_http.request() s'exécutent 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;