Choix technologiques
Le développement de cette plateforme sur le web présente certains avantages indéniables permettant de remplir certains besoins identifiés par les deux ministères (voir section précédente).
Pour développer l'entrepôt de données, la couche métier (API Web), l'applicatif client (Portail Web), nous avons choisi d'utiliser les dernières technologies du web tel que NodeJS, Sequelize et Epilogue (avec PostgreSQL comme entrepôt de données). Chacune de ces technologies est Open Source, aucun droit d'exploitation n'est requis pour la mise en production des services de Coléo. À travers cette section, j'expliquerais les forces de chacune d'entre-elles.
NodeJS
NodeJS est une plateforme logicielle libre et événementielle en JavaScript orientée vers les applications réseau. Le développement de Coléo sur une plateforme telle que NodeJS nous permet d'être à jour avec les approches modernes en développement web.
Il permet une mise à l'échelle verticale et horizontale rapidement pour ajuster la charge sur les serveurs entreposant les données (p. ex. augmentation du nombre de requêtes, ajout d'utilisateurs via les directions régionales). NodeJS est une plateforme également très appréciée dans l'univers du développement web pour sa rapidité (tâches asynchrones) et sa modularité (permettre l'ajout de fonctionnalités).
Sequelize.js
Au cours du printemps 2016, nous avons conduit plusieurs réunions avec Caroline Dubé (MFFP) afin
d'identifier convenablement le type et la quantité de données récoltées sur le terrain. Ces
rencontres ont conduit à la conceptualisation de la base de données de Coléo (voir figure TODO:
Insertion du schéma de la base de données à jour). Nous avons implémenté ce schéma conceptuel dans
un schéma logique de données à l'aide d'une ORM: Objects related mapping. Une ORM
permet de créer une table de données SQL par l'intermédiaire d'un objet JavaScript appelé schéma de
données. Dans le cadre du développement de Coléo, nous avons utilisé Sequelize.js. Cette ORM présente l'avantage de posséder une large communauté de développeurs pour le maintien sur le long terme de ses fonctionnalités et également d'être compatible avec les champs de type geometry
.
L'ensemble des schémas de données pour chacune des tables de la base de données sont
accessibles depuis le dépôt
coleo-api. Chaque
schéma de données se retrouve dans un dossier avec deux fichiers associés: index.js
et
ressource.js
. Le fichier index.js
corresponds à la déclaration du schéma de données et le
fichier ressource.js
corresponds à la couche de logique métier (voir section suivante).
L'utilisation d'une ORM, telle que sequelize.js, présente l'avantage de faciliter des modifications au schéma de données. Une simple modification du schéma de données permet une reconstruction de la table SQL. Ce genre d'outil est particulièrement adapté dans un contexte de projet en évolution continue, car il nous permet de redéfinir la structure du dépôt de données rapidement au besoin. Il faut cependant prendre en considération que la base de données est la couche inférieure sur laquelle repose l'ensemble des applicatifs des couches supérieures. Par conséquent, si l'on modifie le schéma logique de données, la couche supérieure appelée logique de métier doit être réécrite en conséquence (ce qui ne s'applique pas dans notre cas, voir section plus bas sur Epilogue.js).
PostgreSQL

Une fois les schémas de données définis à travers des objets JavaScript, nous avons choisi de déployer les tables SQL sur le système de gestion de base de données PostgreSQL. PostgreSQL est particulièrement adapté au besoin d’entreposage des données du suivi BdQc de par ses performances et sa capacité à intégrer et analyser des données spatiales (fichiers de formes : Shapefiles) via la cartouche PostGIS. PostgreSQL permet le stockage des grilles climatiques telles que celles du Consortium Ouranos (voir Présentation Ouranos). Ce SGBD en constante évolution constitue donc un outil de choix pour l’entreposage à long terme des données du programme de suivi de par l’existence d’une expertise et sa capacité à stocker des objets spatialisés.
Une fois les tables SQL définies dans un schéma de données (objet JavaScript), nous pouvons ajouter une couche de métier (buisness logic) permettant les opérations d'ajouts, d'édition et de suppression des données. Cette couche s'implémente par l'intermédiaire de Sequelize.js.
Epilogue.js
Pour développer cette couche de métier permettant la manipulation des données (création, édition et
suppression), nous avons choisi d'utiliser la librarie
Epilogue.js. Cette librairie est responsable de scanner les
schémas de données définies dans Sequelize.js afin de créer l'ensemble des ressources et des méthodes
CRUD (Create, Read, Update, Delete) pour chacune des tables de données. Une ressource peut
être vu comme un point d'accès unique vers une table de données et sur cette ressource, on applique
des méthodes (CRUD) pour la manipulation des données. Epilogue.js
automatise le déploiement des
ressources et implémente automatiquement les méthodes CRUD pour chacune des ressources.
L'utilisation de cette librairie réduit considérablement le temps de développement, car nous permet
d'éviter de développer intégralement nous-mêmes l'ensemble de la logique de la couche métier.
Epilogue permet également d'ajouter des couches intermédiaires appelées middlewares
. L'une des
premières couches intermédiaires que nous avons mise en place consiste à intercepter la requête du
client (ex: lecture des données de la table campagnes
) afin de vérifier si l'utilisateur dispose
des droits suffisant pour accéder à cette information.