Weblog MSDN de Thomas Conté

Le Weblog MSDN de Thomas Conté, en français.

Interopérabilité des données avec OData

Interopérabilité des données avec OData

  • Comments 1

Nous avons annoncé hier au MIX10 de nombreuses nouvelles concernant le Open Data Protocol (OData), ainsi qu’un SDK très riche et interopérable, permettant de créer des applications multi-plateformes fondées sur la consommation simple de données.

OData est un protocole ouvert de partage de données que Microsoft met à disposition via la Microsoft Open Specification Promise (OSP), permettant à tout un chacun d’implémenter ou d’utiliser le protocole pour consommer ou exposer des données.

Ce protocole OData a un historique assez riche, trouvant ses origines dans le projet Astoria lancé en 2007 sous la forme d’une CTP, puis intégré dans le Framework .NET 3.5 SP1 sous le nom de ADO.NET Data Services, et re-renommé WCF Data Services dans le Framework 4.0. WCF Data Services est une implémentation concrète vous permettant d’exposer facilement un modèle de données, par exemple un schéma Entity Data Model (EDM), mais également toute autre source de données, sous une forme simple à consommer par tout type de client. Cette forme, c’est le protocole OData, qui n’avait pas réellement de nom dans les premières itérations du projet Astoria/Data Services, et qui a été baptisé et ouvert afin que tout le monde puisse l’exploiter.

En syntèse, l’on a annoncé au MIX10 une toute nouvelle version du site OData.org présentant le protocole & sa spécification, ainsi qu’un SDK OData incluant une quantité de ressources facilitant l’exposition de services OData et leur consommation depuis n’importe quel client:

Ce SDK est donc fortement tourné vers l’interopérabilité et démontre l’agilité qu’offre le protocole OData pour le développement d’applications basées sur les données, et ce quel que soit le terminal cible: PC ou mobile ou navigateur Web, .NET ou non, Microsoft ou pas!

Le billet de J.-C. Cimetière sur le blog Interoperability @ Microsoft se concentre sur le SDK PHP, avec une vidéo de démo, je vais donc pour ma part me concentrer sur l’API Java, intégrée au framework Restlet de Noelios, référence en matière de REST dans le monde Java.

Rapide introduction au protocole OData

Le protocole OData a pour objectif de simplifier le partage de données en se basant sur les principes REST, à savoir l’utilisation de la simple syntaxe du protocole HTTP ainsi que sur des représentations facilement exploitables, typiquement du XML et du JSON.

Pour illustrer tout de suite la flexibilité qu’apporte ce protocole, voyons comment l’on peut exploiter les informations exposées par le site du MIX10; ouvrez simplement l’URL suivant dans votre navigateur:

http://api.visitmix.com/OData.svc/

Et vous verrez le document XML suivant s’afficher:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<service xml:base="http://api.visitmix.com/OData.svc/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app">
 <workspace>
  <atom:title>Default</atom:title>
  <collection href="Sessions">
   <atom:title>Sessions</atom:title>
  </collection>
  <collection href="Speakers">
   <atom:title>Speakers</atom:title>
  </collection>
  <collection href="Tags">
   <atom:title>Tags</atom:title>
  </collection>
  <collection href="Files">
   <atom:title>Files</atom:title>
  </collection>
 </workspace>
</service>

Ce document XML forme le Service Document, qui vous permet de découvrir les flux de données exposés par le service. L’on voit que le format XML est très simple à lire, et que l’on a des flux pour les Sessions, Speakers, etc.

Comment accéder à ces flux? Simple! Il suffit d’ajouter à notre URL le nom du flux, cmme ceci par exemple:

http://api.visitmix.com/OData.svc/Sessions/

Si vous ouvrez cet URL dans Internet Explorer, quelque chose de magique se passe: IE ayant détecté que la réponse était un fichier au format RSS (en réalité au format AtomPub, mais que IE interprète comme du RSS), il lui applique une feuille de style permettant de l’afficher de façon lisible.

Comme nous nous intéressons au format de données effectivement renvoyé, nous pouvons regarder le source de la page pour récupérer le document XML d’origine, et l’on voit quelques chose comme ça:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="http://api.visitmix.com/OData.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
 <title type="text">Sessions</title>
 <id>http://api.visitmix.com/OData.svc/Sessions/</id>
 <updated>2010-03-17T16:52:18Z</updated>
 <link rel="self" title="Sessions" href="Sessions" />
 <entry>
  <id>http://api.visitmix.com/OData.svc/Sessions(guid'816995df-b09a-447a-9391-019512f643a0')</id>
  <title type="text">Building Web Applications with Microsoft SQL Azure</title>
  <summary type="text">SQL Azure provides a highly available and scalable relational database engine in the cloud. In this demo-intensive and interactive session, learn how to quickly build web applications with SQL Azure Databases and familiar web technologies. We demonstrate how you can quickly provision, build and populate a new SQL Azure database directly from your web browser. Also, see firsthand several new enhancements we are adding to SQL Azure based on the feedback we’ve received from the community since launching the service earlier this year.</summary>
  <published>2010-01-25T00:00:00-05:00</published>
  <updated>2010-03-05T01:07:05-05:00</updated>
  <author>
   <name />
  </author>
  <link rel="edit" title="Session" href="Sessions(guid'816995df-b09a-447a-9391-019512f643a0')" />
  <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Speakers" type="application/atom+xml;type=feed" title="Speakers" href="Sessions(guid'816995df-b09a-447a-9391-019512f643a0')/Speakers" />
  <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Tags" type="application/atom+xml;type=feed" title="Tags" href="Sessions(guid'816995df-b09a-447a-9391-019512f643a0')/Tags" />
  <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Files" type="application/atom+xml;type=feed" title="Files" href="Sessions(guid'816995df-b09a-447a-9391-019512f643a0')/Files" />
  <category term="EventModel.Session" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
  <content type="application/xml">
   <m:properties>
    <d:SessionID m:type="Edm.Guid">816995df-b09a-447a-9391-019512f643a0</d:SessionID>
    <d:Location>Breakers L</d:Location>
    <d:Type>Seminar</d:Type>
    <d:Code>SVC07</d:Code>
    <d:StartTime m:type="Edm.DateTime">2010-03-17T12:00:00</d:StartTime>
    <d:EndTime m:type="Edm.DateTime">2010-03-17T13:00:00</d:EndTime>
    <d:Slug>SVC07</d:Slug>
    <d:CreatedDate m:type="Edm.DateTime">2010-01-26T18:14:24.687</d:CreatedDate>
    <d:SourceID m:type="Edm.Guid">cddca9b7-6830-4d06-af93-5fd87afb67b0</d:SourceID>
   </m:properties>
  </content>
 </entry>
</feed>

Je n’ai laissé qu’une seule entité pour abréger! L’on voit que l’on a ici un document XML au format AtomPub, auquel l’on a ajouté des extensions (les éléments définis dans les namespaces m: et d:). Ces extensions au format Atom sont bien entendu décrites dans le protocole, et justement permises par le format Atom lui-même (autrement dit, un client capable de consommer un flux Atom pourra consommer un flux OData).

Je ne vais pas rentrer pour le moment dans le détail du format OData, mais l’on voit rapidement que l’on a les éléments Atom classiques, semblables à ceux que l’on trouve dans un flux RSS (“title”, “summary”, etc.), des liens représentant des relations à d’autres entités (par exemples les Speakers ou les Tags associés à cette Session), puis les champs spécifiques à l’entité Session.

Maintenant, voyons rapidement ce que l’on peut exprimer comme paramètres de requête au niveau de l’URL:

Je ne vais pas vous détailler l’ensemble des conventions disponibles dans les URI, vous pourrez les consulter dans la spécification du protocole, mais l’on peut somme toute être assez expressif dans ce cadre pourtant restrictif!

Bien entendu, vous avez sûrement envie de consulter ces données avec une interface un peu plus utilisable que la barre d’adresse de votre navigateur et des documents XML! Nous avons d’ores et déjà de nombreux clients disponibles pour consommer du OData:

Pointez ces clients sur le même URL que précédemment, et vous pourrez consommer les flux de façon plus agréable! Voici par exemple le flux dans le ODataExplorer:

image

Dans LINQPad, accédé via une expression LINQ:

image

Et un graphe créé en quelques secondes à partir des données via PowerPivot et Excel:

image

Après cette introduction, je vous donne rendez-vous dans la deuxième partie de ce billet pour explorer l’API Java du framework Restlet!

  • Super article! A relayer sur MSDN France.

    David

Page 1 of 1 (1 items)
Leave a Comment
  • Please add 2 and 3 and type the answer here:
  • Post