Utilisation des services Web avec Oracle APEX

Vous pouvez interagir avec les services Web de type SOAP et RESTful à partir d'Oracle APEX dans votre instance Autonomous Database.

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.

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 :

  1. 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.

  2. 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;
    /
Remarque

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.

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.

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.

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'API UTL_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 ::