Database As A Service : accès depuis internet via Restful

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 ».
ords_admin
 
 
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 »
ords_workspace
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 »
ords_cre_restful
 
 
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.
ords_handler
 
 
 

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
 
ords_test_url
 

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