Il y a parfois des questions techniques que l’on se pose concernant certaines architectures, notamment avec le cloud. L’une d’entre elles est la manière d’accéder aux DBaas (database as a service) exposées sur un cloud.
L’accès à un cloud privé fournissant des bases Oracle sous forme DBaas ne pose pas de problème quant aux bases de données hébergées, puisque accessibles classiquement via sql*net au sein du réseau d’entreprise. Par contre il en va différemment de l’accès aux données des bases accessibles via un cloud public (ou même privé) nécessitant des mécanismes permettant d’exécuter des requêtes via des protocoles disponibles sur internet et de présenter ces données selon un format standard en fournissant les couches d’isolement et de sécurité nécessaires.
Restful, protocole d’accès cloud privilégié par Oracle, est une architecture simple pour accéder aux données depuis le monde internet vers les bases de données en cloud. Plutôt que d’utiliser un mécanisme complexe comme SOAP pour faire communiquer les serveurs, le protocole http est utilisé directement pour ces connexions en utilisant les URLs pour effectuer les requêtes. Restful permet des opérations CRUD (pour Create, Read, Update, Delete) directement sur la base de données alors que SOAP expose une logique de services sans accès direct à la base de données : les finalités ne sont pas les mêmes.
Pour l’implémentation de Restful, Oracle fourni le produit Oracle REST Data Services, ORDS (anciennement Apex Listener). ORDS apporte la couche de mise en forme et communication, Apex (Application Express) fourni les métas datas et la couche de sécurité d’accès à la base de données.
ORDS , est fourni sous forme de fichier .war, il peut être déployé de plusieurs manières, notamment dans Weblogic ou Tomcat ou autonome, c’est-à-dire comme serveur java démarré directement sur le serveur de base de données (solution déconseillée en production par Oracle).
Nous allons voir à travers un petit exemple la mise en place de cette architecture dans une base de données pour laquelle nous voulons permettre l’accès en SELECT à une table en lui passant un paramètre. Les problématiques de sécurité sont mises de coté dans un soucis de simplification pour la présentation du mécanisme.
1) Préparation
J’utilise une base de données en version 12c, Apex est déjà installé par défaut.
Télécharger le produit ORDS sur
http://www.oracle.com/technetwork/developer-tools/rest-data-services/downloads/index.html
2) Installation dans la base de données
Il faut exécuter dans la base de données le fichier apex_rest_config.sql se trouvant dans le répertoire $ORACLE_HOME/apex :
SQL> @apex_rest_config.sql
Lancer aussi apxconf.sql qui permet de définir le mot de passe de l’utilisateur admin d’apex que nous allons utiliser plus bas ainsi que le port d’apex qui sera défini différement de celui utilisé pour ords :
SQL> @apxconf
Tous les users database préfixé par APEX doivent être dans l’état débloqué.
Je crée dans le schéma « jp » une table « villes »contenant les lignes suivantes :
SQL> select * from jp.villes; NOM DEPARTEMENT ------------------------------ ---------------------------------------- Hagetmau Landes Rambouillet Yvelines
3) Lancer ORDS comme un serveur
Lancer ORDS , télécharger précédemment avec la ligne de commande suivante, avec l’utilisateur Oracle :
$ java -jar ords.war
par défaut il est lancer avec le paramètre standalone
La version de java doit être au minimum jdk 1.7
Au premier lancement, celui-ci demande des paramètres, notamment l’emplacement d’ Apex static path, qui est pour moi : /u01/app/oracle/product/db/12.1.0/apex/images
4) Création d’un workspace dans Apex
Se connecter sur http://localhost:8080/ords et cliquer dans le bas de l’écran sur « administration ».
Une fois connecter avec le login « admin » et le mot de passe définit plus haut, créer un Workspace « testrestful » qui sera relié au schéma « jp » contenant la table « villes »
Se déconnecter
5) Création du Restful service
Se reconnecter sur http://127.0.0.1:8080/ords dans le workspace « testrestful »
Dans SQL Workshop, créer un RESTful services « villes »
Paramétrer un handler de type GET pour exécuter une requête pour laquelle un paramètre peut être passé, en l’occurrence le nom d’une ville se trouvant dans la table villes.
6) Accès aux données depuis une url
Pour accéder aux données retournées au format json (csv est aussi possible), entrer l’url composée de :
http://adresse_serveur:port/ords/nom_workspace/nom_service_restful/nom_module/nom_handler/paramétre_requete
Conclusion
Nous sommes loin d’avoir fait le tour du sujet ! Cela cependant nous a permis d’entrevoir les possibilités qu’offre le cloud Oracle. Je vous donne rendez-vous pour un prochain sujet autour du cloud !
Juste une info : Oracle met à disposition un environnement de test Apex en ligne sur internet après inscription ; à vous de jouer :
https://apex.oracle.com/i/index.html