OGDI DataLab évolue !
La plateforme de publication de données ouvertes OGDI DataLab (disponible sur la forge GitHub comme solution communautaire sous licence libre Microsoft Public License (Ms-PL)) évolue comme l’indique le titre de ce billet.
Ainsi, vis-à-vis de la version 5 disponible jusqu'à présent, un ensemble de nouvelles fonctionnalités ont été introduites au niveau de la branche V6 sur la forge et sont désormais utilisables par tous dès aujourd’hui.
Au-delà d’un nouveau palier technique dans les versions des technologies utilisées, avec notamment :
- Une solution au format Visual Studio 2012,
- La prise en charge du Microsoft .NET Framework 4.5,
- Celle également du Kit de développement logiciel (SDK) Windows Azure pour .NET – Octobre 2012,
L’objectif de ce billet, vous l’aurez compris, consiste à vous proposer une vue d’ensemble rapide de ces nouvelles fonctionnalités qui concernent plus particulièrement :
- Le service de données (projet nommé DataService),
- L’explorateur de données (projet nommé DataBrowser),
- L’outil de chargement de données (projet nommé DataLoader).
Voyons à présent ce qu’il en est de ces nouvelles fonctionnalités. Toute la documentation sur la solution a elle aussi été mise à jour en conséquence pour les refléter. Vous pouvez donc vous reporter à cette dernière pour plus de détails sur ces évolutions.
Le service de données
Les principales nouveautés de cette évolution d’OGDI DataLab se concentrent au niveau du service de données (projet nommé DataService). Il s’agit pour mémoire d’un service de données RESTful conforme au protocole ouvert de donnée OData (Open Data Protocol) qui permet de consommer les différents catalogues de jeux de données publiés.
Ce service de données est complément réécrit dans cette version avec, à la clé, une nouvelle architecture (encore) plus performante. Il convient également de noter dans ce contexte la prise en charge de nouvelles fonctions dans l’URL de requête.
Nous tenons à ce propos à remercier très sincèrement les équipes en charge du portail opendata.bordeaux.fr de la Ville de Bordeaux pour :
- Les améliorations apportées au service de données en termes de prise en charge de mots-clés additionnels au niveau des opérations de requête d’un jeu de données pour offrir une couverture fonctionnelle améliorée de la spécification d’OData.
- La volonté de partager ces améliorations avec le plus grand nombre et de contribuer ainsi à la solution communautaire OGDI DataLab dans un esprit de mutualisation des investissements que nous souhaitons ici saluer. C’est clairement le cercle vertueux que nous souhaitons encourager et soutenir pour la solution.
Cette contribution est désormais intégrée dans la branche v6.
Une nouvelle architecture
Le travail de refonte a porté essentiellement sur une factorisation du code pour éviter au maximum la redondance de code. Le diagramme ci-dessous présente l’organisation des classes de traitement des requêtes HTTP.
La classe abstraite AbstractHttpHandler regroupe le code commun à l’ensemble des requêtes, à savoir l’analyse de la chaîne de requête ainsi que la récupération des données dans les tables Azure.
Les classes qui héritent de la classe abstraite AbstractHttpHandler s’occupent de mettre en forme des réponses selon les types de requêtes. A ce titre, la classe MainHttpHandler est la classe qui gère les requêtes classiques sur les données ; toutes les autres classes gèrent les cas spécifiques tels que les métadonnées ou la liste des catalogues de jeux de données.
Les nouvelles fonctionnalités
Comme évoqué précédemment, le service de données RESTful gère à présent de nouveaux mots-clés OData qui peuvent être insérés dans l’URL de requête. Ces mots clés permettent de personnaliser les résultats retournés par le service de données. Ces nouvelles fonctionnalités ont été ajoutées dans le but à la fois d’offrir une meilleure flexibilité et de se rapprocher au maximum de la spécification OData en termes de couverture fonctionnelle.
Mot clé $top
Il est maintenant possible de spécifier la valeur « all » pour le paramètre $top ; ce qui a pour effet de retourner l’ensemble des résultats d’un jeu de données (dataset) sans limiter du nombre de résultat. Pour rappel, le service de données retourne par défaut les 1000 premiers résultats d’un jeu de données et le flux ainsi retourné contient à la fin des résultats de cette première requête http un élément de type link contenant l’URL pour obtenir les enregistrements suivants, et ainsi de suite jusqu’à ce que l’on ait parcouru tous les résultats. Pour ce faire, l’URL contient un jeton de continuation $skiptoken.
Le tableau ci-dessous présente quelques exemples d’utilisation du paramètre $top :
Requête | Description |
Pas de $top https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset | Retourne un maximum de 1000 lignes |
$top=2 https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset? $top= 2 | Retourne un maximum de 2 lignes |
$top=2390 https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset? $top= 2390 | Retourne un maximum de 2390 lignes |
$top=all https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset? $top= all | Retourne toutes les lignes |
Le service de données se conforme à la spécification OData pour le paramètre $top et ce comme décrit ici.
Mot clé $skip
Le paramètre $skip permet d’omettre les X premières lignes du résultat d’une requête (X étant la valeur du paramètre $skip).
Le tableau ci-dessous présente quelques exemples d’utilisation du paramètre $skip :
Requête | Description |
$skip=2 https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset? $skip= 2 | Les 2 premiers résultats seront omis |
$skip=5&$top=10 https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset? $skip= 5& $top= 10 | Retourne 10 résultats à partir du 5ème |
Il convient de noter qu’il ne faut pas utiliser le mot clé $skip comme un moyen de pagination. Un lien prévu à cet effet est spécifié en bas de la réponse comme décrit précédemment.
Le service de données se conforme à la spécification OData pour le paramètre $skip et ce comme décrit ici.
Mot clé $orderby
Le paramètre $orderby permet de demander au service de données de trier les résultats avant de les retourner. Il est aussi possible de spécifier l’ordre de tri, à savoir asc pour l’ordre croissant et desc pour l’ordre décroissant. Si aucun ordre n’est spécifié, c’est l’ordre croissant qui est utilisé par défaut.
Le tableau ci-dessous présente quelques exemples d’utilisation du paramètre $orderby :
Requête | Description |
$orderby=mairie https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset? $orderby= mairie | Trier par champs mairie croissant |
$orderby=insee desc https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset? $orderby= insee desc | Trier par champs code insee décroissant |
Le service de données se conforme à la spécification OData pour le paramètre $orderby et ce comme décrit ici.
Mot clé $filter
Le paramètre $filter était déjà disponible dans la version précédente d’OGDI DataLab. La nouveauté apportée réside dans la possibilité désormais offerte d’utiliser des fonctions de chaîne de caractères, des fonctions de date et des fonctions de nombre dans l’URL de la requête.
Le tableau ci-dessous détaille l’ensemble des nouvelles fonctions :
Fonctions de date |
Int day(DateTime date) https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset?$filter=day( date_ajout ) eq 28 |
Int hour(DateTime date) https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset?$filter=hour( date_ajout ) eq 00 |
Int minute(DateTime date) https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset?$filter=minute( date_ajout ) eq 01 |
Int month(DateTime date) https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset?$filter=month( date_ajout ) eq 02 |
Int second(DateTime date) https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset?$filter=second( date_ajout ) eq 09 |
Int year(DateTime date) https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset?$filter=year( date_ajout ) eq 2012 |
Fonctions sur les nombres |
Double round(double nb) https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset?$filter=round( nombre_test ) eq 42 |
Double floor(double nb) https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset?$filter=floor( nombre_test ) eq 42 |
Double ceiling(double nb) https://ogdifrance.cloudapp.net:8080/v1/catalog/dataset?$filter=ceiling( nombre_test ) eq 43 |
Le service de données se conforme à la spécification OData pour le paramètre $filter et ce comme décrit ici.
L’explorateur de données
Suite à la disponibilité de Windows Azure Caching, un précédent billet sur ce blog décrivait la mise en œuvre en pas à pas d’un cache partagé au sein de la plateforme OGDI DataLab pour le service de données et l’explorateur de données et ce, sur la base de la version v5 d’OGDI DataLab.
Cette gestion de cache a été optimisée et est désormais nativement intégrée dans la solution pour ces deux composantes. Dans la pratique, il est possible d’activer ou de désactiver l’utilisation du cache via le paramètre UseCache du projet Cloud DataBrowser.Cloud de l’explorateur de données.
Le chargeur de données
L’interface graphique de l’outil de chargement de données a enfin également été revue. Elle est maintenant plus claire et plus simple d’utilisation ; Enfin nous l’espérons ;) Le fonctionnement général n’a pas été modifié.
Une gestion intelligente du proxy a été ajoutée, c’est-à-dire que l’outil retrouve automatiquement les paramètres de proxy selon la configuration sauvegardée au niveau du système Windows, paramètres que l’on retrouve dans les options Internet d’Internet Explorer. Il est aussi possible de spécifier une adresse de proxy spécifique.
Enfin, la case Bind To Map de l’onglet Dataset Columns est désormais décochée par défaut ; celle-ci entrainait des erreurs lorsque l’utilisateur oubliait de configurer (correctement) les informations de localisation.
En guise de conclusion
Cette nouvelle version d’OGDI DataLab est actuellement en ligne sur l’instance de test OGDI DataLab mise à disposition par Microsoft France. Vous pouvez directement tester les nouvelles fonctionnalités du service de données via l’adresse https://ogdifrance.cloudapp.net:8080/v1/.
Pour rappel, l’ensemble du code disponible sous licence libre Microsoft Public License (Ms-PL) est disponible sur la forge GitHub au niveau de la branche V6 du projet openlab/DataLab. Bons tests :)