Utilisation des services Web avec Oracle APEX
Les services Web permettent aux applications d'interagir les unes avec les autres sur le Web dans un environnement indépendant de la langue et de la plate-forme. Dans un scénario de services Web classique, une application métier envoie une demande à un service à une URL donnée à l'aide du protocole HTTP. Le service reçoit la demande, la traite et renvoie une réponse. Les services Web reposent généralement sur des architectures SOAP (Simple Object Access Protocol) ou REST (Representational State Transfer).
A l'aide des sources de données REST, les développeurs APEX peuvent accéder de manière déclarative aux services de données à partir de diverses adresses REST, ce qui permet des opérations de lecture et d'écriture. En plus de prendre en charge les règles de mise en cache intelligente pour les données REST distantes, Oracle APEX offre également la possibilité unique de manipuler directement les résultats des sources de données REST à l'aide du code SQL standard du secteur.
Le package APEX_WEB_SERVICE
vous permet d'intégrer d'autres systèmes à APEX en vous permettant d'interagir avec les services Web partout où vous pouvez utiliser PL/SQL dans votre application. Il contient des procédures et des fonctions permettant d'appeler des services Web de type SOAP et RESTful, et de simplifier l'implémentation de flux OAuth 2.0.
- Soumission d'une demande HTTP à un hôte privé avec Oracle APEX
Il existe plusieurs exigences pour soumettre une demande HTTP à un hôte privé à partir d'Oracle APEX dans votre instance Autonomous Database. - Création d'appels externes à l'aide d'un portefeuille géré par le client avec Oracle APEX
Oracle APEX sur Autonomous Database est préconfiguré avec un portefeuille Oracle Wallet qui fonctionnera avec la plupart des adresses HTTPS. Si vous souhaitez utiliser des API REST à partir de serveurs qui utilisent des certificats SSL moins courants ou auto-signés, vous pouvez configurer un portefeuille géré par le client. - Création d'appels externes à l'aide d'un proxy Web avec Oracle APEX
Votre instance Oracle APEX n'a pas besoin d'un proxy Web sortant pour effectuer des appels d'API REST externes. Les bases de données autonomes configurées avec une adresse privée peuvent utiliser un proxy Web déployé dans votre VCN si nécessaire. - Remarques relatives à l'utilisation des services Web avec Oracle APEX
Fournit des notes sur l'utilisation des services Web dans Oracle APEX à partir d'une instance Autonomous Database.
Rubrique parent : Création d'applications avec Oracle APEX dans Autonomous Database
Soumission d'une demande HTTP à un hôte privé avec Oracle APEX
Il existe plusieurs exigences pour soumettre une demande HTTP à un hôte privé à partir d'Oracle APEX dans votre instance Autonomous Database.
Pour soumettre une demande à un hôte cible sur une adresse privée ou derrière des pare-feu sur site, l'hôte cible doit être accessible à partir du VCN Oracle Cloud Infrastructure de la base de données source :
-
Assurez-vous que l'adresse respecte les prérequis pour soumettre une demande HTTP, comme décrit ici : Soumission d'une demande HTTP à un hôte privé avec UTL_HTTP.
-
Ajoutez la liste de contrôle d'accès suivante pour l'hôte souhaité en tant qu'ADMIN (notez le paramètre
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; /
Si vous définissez la propriété de base de données
ROUTE_OUTBOUND_CONNECTIONS
sur PRIVATE_ENDPOINT
, vous n'avez pas besoin de définir des listes de contrôle d'accès pour des hôtes individuels afin d'y accéder à partir d'APEX. Pour plus d'informations, reportez-vous à Sécurité améliorée pour les connexions sortantes avec des adresses privées.
Rubrique parent : Utilisation des services Web avec Oracle APEX
Effectuer des appels externes à l'aide d'un portefeuille géré par le client avec Oracle APEX
Oracle APEX sur Autonomous Database est préconfiguré avec un portefeuille Oracle Wallet qui fonctionnera avec la plupart des adresses HTTPS. Si vous souhaitez utiliser des API REST à partir de serveurs qui utilisent des certificats SSL moins courants ou auto-signés, vous pouvez configurer un portefeuille géré par le client.
Oracle APEX sur Autonomous Database est préconfiguré avec un Oracle Wallet qui contient plus de 90 des certificats SSL intermédiaires et racine sécurisés les plus courants. Le package APEX_WEB_SERVICE
tire automatiquement parti de ce portefeuille Oracle Wallet sans configuration supplémentaire de la part des développeurs d'application.
Si vous souhaitez utiliser des API REST à partir de serveurs qui utilisent des certificats SSL moins courants ou auto-signés, vous pouvez configurer un portefeuille géré par le client. Tout d'abord, suivez les instructions de configuration et de déploiement dans Prérequis pour l'utilisation d'un portefeuille géré par le client avec des appels externes. Une fois le portefeuille déployé sur votre instance Autonomous Database, accordez READ
sur l'objet de répertoire contenant le portefeuille au schéma de plate-forme APEX en tant que ADMIN
:
BEGIN
execute immediate 'grant READ on directory WALLET_DIR to ' ||
APEX_APPLICATION.g_flow_schema_owner;
END;
Ensuite, lorsque vous référencez le portefeuille dans les appels d'API APEX_WEB_SERVICE
, veillez à utiliser le préfixe DIR:
au lieu du préfixe FILE:
habituel. Exemples :
l_resp := APEX_WEB_SERVICE.MAKE_REST_REQUEST(
p_url => 'https://www.example.com/',
p_http_method => 'GET',
p_wallet_path => 'DIR:WALLET_DIR'
);
Vous pouvez également configurer ce portefeuille comme valeur par défaut pour l'ensemble de l'instance Oracle APEX dans Services d'administration APEX en sélectionnant Gérer l'instance → Paramètres d'instance → Portefeuille → Chemin du portefeuille ou en définissant le paramètre d'instance WALLET_PATH
.
Pour revenir au portefeuille préconfiguré, définissez WALLET_PATH
sur une valeur vide.
Pour plus d'informations, reportez-vous à Accès aux services d'administration Oracle APEX.
Rubrique parent : Utilisation des services Web avec Oracle APEX
Effectuer des appels externes à l'aide d'un proxy Web avec Oracle APEX
Votre instance Oracle APEX ne nécessite pas de proxy Web sortant pour effectuer des appels d'API REST externes. Les bases de données autonomes configurées avec une adresse privée peuvent utiliser un proxy Web déployé dans votre VCN si nécessaire.
Pour utiliser un proxy Web, définissez la liste de contrôle d'accès suivante sur 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;
/
Vous pouvez ensuite utiliser le proxy Web dans les appels d'API APEX_WEB_SERVICE
:
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'
);
Vous pouvez également configurer un proxy Web au niveau de l'application en définissant la propriété Serveur proxy sur la page Composants partagés → Définition de l'application → Propriétés, ou au niveau de l'instance dans Services d'administration APEX à partir de Gérer l'instance → Sécurité → Proxy d'instance.
Si vous tentez d'utiliser un proxy Web lorsque votre instance Autonomous Database est configurée avec une adresse publique, une erreur est renvoyée :
ORA-01031: insufficient privileges
Pour plus d'informations sur les proxies lors de l'utilisation de l'API UTL_HTTP
, reportez-vous à Soumission d'une demande HTTP à un hôte privé avec UTL_HTTP.
Pour plus d'informations, reportez-vous à Accès aux services d'administration Oracle APEX.
Rubrique parent : Utilisation des services Web avec Oracle APEX
Remarques sur l'utilisation des services Web avec Oracle APEX
Fournit des notes sur l'utilisation des services Web dans Oracle APEX à partir d'une instance Autonomous Database.
Lorsque vous utilisez des services Web dans Oracle APEX, tenez compte des points suivants :
-
Tous les services Web doivent être sécurisés. Seuls les services HTTPS sont pris en charge sur le port par défaut (443). Les connexions par le biais d'adresses IP ne sont pas autorisées.
-
Chaque instance Autonomous Database est préconfigurée avec une liste de contrôle d'accès réseau pour autoriser les appels de service Web sortants à partir d'Oracle APEX vers des adresses publiques.
-
Les demandes
APEX_WEB_SERVICE
n'honorent pas le portefeuille personnalisé que vous avez défini avec les appels d'APIUTL_HTTP.SET_WALLET
. -
Il existe une limite par défaut de 1 000 demandes de service Web sortantes par espace de travail APEX sur une période glissante de 24 heures (cela s'applique aux nouvelles bases de données, certaines bases de données plus anciennes peuvent avoir une limite plus élevée). Si la limite des appels de service Web sortants est atteinte, l'exception SQL suivante est générée sur la demande suivante et la demande est bloquée :
ORA-20001: You have exceeded the maximum number of web service requests per workspace. Please contact your administrator.
Vous pouvez augmenter ou enlever la limite par défaut des demandes de service Web sortantes en définissant une valeur pour le paramètre d'instance
MAX_WEBSERVICE_REQUESTS
ou en mettant à jour l'attribut de nombre maximal de demandes de service Web dans les services d'administration APEX. Par exemple, pour définir la limite sur 250 000, connectez-vous à votre base de données en tant qu'utilisateur ADMIN à l'aide d'un client SQL et exécutez la commande suivante :BEGIN APEX_INSTANCE_ADMIN.SET_PARAMETER('MAX_WEBSERVICE_REQUESTS', '250000'); COMMIT; END; /
Pour plus d'informations, reportez-vous aux sections suivantes ::
-
APEX_WEB_SERVICE dans Référence d'API Oracle APEX
-
Gestion des sources de données REST dans le guide de l'utilisateur Oracle APEX App Builder
Rubrique parent : Utilisation des services Web avec Oracle APEX