Jaa


Interopérabilité du service de données d’OGDI DataLab : l’exemple par cURL et libcurl

La solution communautaire OGDI DataLab disponible sur la forge GitHub sous licence libre Microsoft Public License (Ms-PL) est une plateforme de publication de données (ouvertes) proposant un service de données RESTful alliant flexibilité et ouverture. Cette ouverture est d’autant plus grande qu’elle est fondée sur un protocole Web ouvert, à savoir le protocole ouvert de donnée OData (Open Data Protocol).

image

Ce protocole, qui permet facilement de requêter et d’effectuer des opérations (de type CRUD au moyen de verbes http standard) sur les données (ouvertes), offre donc l’avantage d’être pris en charge par un très large écosystème de producteurs (comme le service de données OGDI DataLab), de consommateurs et de bibliothèques du fait de son architecture REST.

Pour en savoir plus sur le protocole OData, nous vous invitons à consulter sur ce blog une (première) vue d’ensemble sur le protocole ainsi que les informations sur la standardisation en cours à l’OASIS. Vous pouvez également visiter le site Web OData.org pour accéder à la documentation détaillée, comme les spécifications du protocole, ainsi qu’aux différents éléments afférents au protocole OData comme les décisions de conception qui ont été prises lors de son élaboration, pour partager des expériences de mise en œuvre, etc.

C’est au travers de la prise en charge native et conforme de ce protocole que la solution OGDI DataLab se veut ouverte au plus grand nombre de consommateurs de données (ouvertes) : plateformes, environnements, langages, etc. Il devient donc aisé de requêter sur un (jeu de données de l’un) des catalogues de données OData exposés par OGDI DataLab depuis une application en ligne de commande ou depuis n’importe quel langage gérant le protocole http.

A ce titre, cURL et libcurl se démarquent du lot en apportant une gestion avancée du protocole http tout en étant disponible sur la plupart des plateformes existantes.

image image

Grandement reconnu au sein de multiples communautés de développeurs pour sa puissance et sa facilité d’utilisation, cURL est un outil en ligne de commande permettant de transférer des données en adoptant une syntaxe basée sur des URL. C’est donc un outil particulièrement adapté au service de données de la plateforme OGDI DataLab et, plus généralement, par extension à tout service de données reposant sur une architecture REST.

De même, libcurl, un des piliers de cURL, est une bibliothèque multiplateforme à l’attention des développeurs leur permettant de requêter facilement des données aux travers de plusieurs protocoles dont le protocole http. A titre indicatif, la liste non exhaustive des protocoles supportés par libcurl est disponible ici.

Ce sont donc à ces deux outils puissants et disponibles sur un très grand nombre de plateformes que nous allons nous intéresser dans la suite de ce billet.

Pour information, la liste complète des plateformes supportées ainsi que les liens de téléchargements sur ces différentes plateformes sont disponibles ici.

Utilisation de cURL

Pour utiliser cURL, téléchargez la version compatible avec votre plateforme ici.

Sur une plateforme Windows 8 par exemple, cela se traduit par un exécutable à lancer en ligne de commande : curl.exe.

Pour afficher la liste des commandes, rendez-vous dans le dossier d’extraction de cURL et tapez la commande suivante : curl.exe –help

image

Voyons à présent comment récupérer les différents catalogues de données exposés par l’instance de test https://ogdifrance.cloudapp.net de la plateforme OGDI DataLab en exécutant la commande suivante :

curl.exe https://ogdifrance.cloudapp.net:8080/v1

image

Vous remarquerez au passage que l’URL appelée est identique à celle que vous saisissez dans un navigateur Internet.

image

A présent, et pour aller plus en profondeur dans les requêtes OData, voici comment récupérer le nom des communes appartenant à la Gironde (33) depuis le catalogue de données frOpenData , le tout au format JSON (JavaScript Object Notation).

L’URL entrée dans un navigateur est la suivante pour obtenir un tel résultat est la suivante :

https://ogdifrance.cloudapp.net:8080/v1/frOpenData/communes?$filter=codedept eq '33'&$select=nom_min&$format=json

Cependant, cURL ne gère pas les $ dans les URL. La solution consiste donc à passer par des paramètres séparés à l’aide de l’argument -d et de spécifier à cURL d’utiliser la méthode GET avec l’argument -G.

Soit :

curl.exe https://ogdifrance.cloudapp.net:8080/v1/frOpenData/communes -G -d "$format=json&$select=nom_min"

image

Utilisation libcurl en C#

Dans cet exemple, nous utiliserons la bibliothèque C# de libcurl, à savoir LibCurlNet, disponible sur la page de téléchargements dédiée au Framework .NET.

Dans votre solution Visual Studio, ajoutez la référence à la bibliothèque LibCurlNet située dans le sous-dossier extrait bin.

A présent, nous allons utiliser cette nouvelle bibliothèque pour obtenir la liste des catalogues de données de https://ogdifrance.cloudapp.net.

class Program

{

    static void Main(string[] args)

    {

       PerformGetUri("https://ogdifrance.cloudapp.net:8080/v1");

 

       Console.ReadKey();

    }

 

    private static void PerformGetUri(string uri)

    {

       // Initialiastion de cURL

       Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL);

      

       // Instanciation de la requête

       Easy easy = new Easy();

 

       // Définition de l'url à requêter

       easy.SetOpt(CURLoption.CURLOPT_URL, uri);

      

       // Création de la fonction appelée lors de la réceptoin des données

       Easy.WriteFunction wf = new Easy.WriteFunction(OnWriteData);

       easy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf);

      

       // Exécution de la requête

       easy.Perform();

       easy.Cleanup();

       Curl.GlobalCleanup();

   }

 

    private static Int32 OnWriteData(Byte[] buf, Int32 size, Int32 nmemb, Object extraData)

    {

       // Affichage du buffer récupéré

       Console.Write(System.Text.Encoding.UTF8.GetString(buf));

       return size * nmemb;

    }

}

La dernière étape consiste à copier les deux bibliothèques restantes dans le dossier bin (libcurl.dll et LibCurlShim.dll) dans le répertoire d’exécution de votre application.

Compilez puis lancer en mode Debug avec la touche F5.

image

De même, pour récupérer le nom des communes appartenant à la Gironde (33) depuis le catalogue de données frOpenData, le tout au format JSON, remplacez l’URL de l’exemple précédent par :

https://ogdifrance.cloudapp.net:8080/v1/frOpenData/communes?$select=nom_min&$format=json

C’est donc cette fois-ci le même format que les URL saisies dans le navigateur qui est utilisé à l’instar de l’application cURL en ligne de commande.

En guise de conclusion

cURL et libcurl sont deux outils sous licence libre largement diffusés sur différentes plateformes qui se révèlent très utiles au quotidien et entièrement compatibles avec le service de données de la plateforme OGDI DataLab :)

Ils jouent un rôle de facilitateur dans les développements d’applications, notamment en C ou C++, ou encore dans le scripting s’appuyant sur des requêtes http. Ils permettent de montrer encore une fois (à l’instar de précédents billets sur ce blog) le côté interopérable de la solution OGDI DataLab.

Pour plus d’informations sur les outils présentés dans ce billet, nous vous invitons à visiter les liens suivants :