Tech Days 2011 : OData

OData part du problème que, même si on abstrait les formats et les protocoles, il reste que des données ne partagent pas les mêmes schémas.

SQL Azure permet d’exposer les données sous forme OData. http://odata.org/producers/ pour plus de fournisseurs.

Des conventions d’URL permettent d’avoir des appels REST standard, et un format standard d’affichage en JSON ou en XML sont utilisés. Du coup, OData n’est pas une technologie, mais plutôt un ensemble de convention d’exposition des données.

Pour s’abstraire des schémas, il faut exposer un sommaire, sous forme de service, puis de workspaces, puis de collections. Bref, on est très proche de TJS dans l’esprit. Tous les services exposent leur metadonnées.

OData peut être utilisé pour exposer de la donnée bien formatée, de manière relativement agnostique, mais sans atteindre la richesse syntaxique d’une ontologie.

Il y a des outils génériques pour requêter du OData : OData Explorer fait en Silverlight, et puis Sesame (développé par Fabrice Marguerie), également en Silverlight. Ca serait intéressant d’avoir une application mobile sur le même type, de façon à pouvoir exposer facilement de la donnée typée.

Sharepoint expose également ses données au format OData (listdata.svc/MaListe pour l’URL).

WCF Data Services est un SDK qui peut requêter ou exposer de la donnée en OData. Le produit s’appelait anciennement Astoria, pour rappel. Il y a aussi des implémentations pour Windows Phone, iOS. LinqPad et PowerPivot peuvent également aller chercher de la donnée OData.

Pour exposer un entity framework, il suffit de créer un WCF Data Service dans VS.NET.

Dans l’autre sens, on peut ouvrir le svc en référence web pour fournir un modèle entity qu’on pourra utiliser comme contexte pour une interrogation Linq. Le SaveChange fonctionnera, car WCF DataServices enverra un POST de modification correspondant. Les ordres seront bien cumulés en envoyés en un seul message.

Il y a aussi tout ce qu’il faut pour la pagination des résultats, avec les mots clés top et skip.

Une autre démo fait voir comment on peut récupérer du JSON depuis JQuery. JSONP permet d’éviter les problèmes de cross-domain, si le serveur le supporte. On rajoute à l’appel &fomat=json&callback=callbackChargementDonnees. Le deuxième paramètre est nécessaire pour que le mode simplifié JSONP fonctionne. Pas bien compris cette partie là, je ne connais pas assez les problèmes de cross domains et AJAX en général.

Le framework de template créé par Microsoft et adopté par l’équipe JQuery permet de réaliser des choses sympas, comme par exemple un tag de fusion de type {{html }} qui vont prendre une donnée de fragment HTML et l’afficher non pas comme du texte, mais avec son contenu riche.

La démo suivante se fait en Silverlight sur Windows Phone 7, avec une source de données SQL Azure. Il y a une fonction d’exposition sous forme OData dans l’interface de gestion de SQL Azure.

Codeplex fournit le DataSvcUtil.exe qui permet de générer les classes qu’il faut pour WP7.

Comme d’habitude, par contre, et la remarque peut se faire aussi pour la session suivante, la technologie ne fait rien de particulier pour la gestion du versioning et c’est toujours au développeur de se coltiner la totalité du problème… Bref, la solution restera certainement la même pour longtemps, à savoir d’assurer la compatibilité côté serveur. Freebase le fait par exemple avec un timestamp qui permet de requêter la donnée comme elle était à une date dans le passé, y compris en terme de schémas, etc. Logique : de la donnée de dix ans serait trop différente en terme de schéma et ne serait potentiellement même pas transférable dans le nouveau schéma du serveur, sans même parler du client !

Pour la sécurité, on peut utiliser des QueryInterceptor<T>. On peut utiliser aussi OAuth WRAP de ACS sous Azure.

About JP Gouigoux

Jean-Philippe Gouigoux est Architecte Logiciel, MVP Connected Systems Developer. Il intervient régulièrement à l'Université de Bretagne Sud ainsi qu'à l'Agile Tour. Plus de détails sur la page "Curriculum Vitae" de ce blog.
This entry was posted in Retours and tagged . Bookmark the permalink.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha Captcha Reload