Afin de faire un tour d’horizon de l’architecture REST et son implémentation en environnement hétérogène .Net et Java, cette session a été co-animée avec Thierry Boileau de la société Noelios Technologies, spécialistes REST et concepteurs du framework Restlet.

Nous avons choisi de consacrer 30 minutes aux principes d’architecture REST et à la méthodologie ROA/D préconisée par Noelios : identification des ressources, constitution des URI, choix des méthodes, conception des représentations, définition des statuts HTTP. En conclusion, de cette première partie, REST est un style d’architecture, chacun doit se positionner depuis les positions les plus pragmatiques ou plus puristes (au sens respectueuses de la thèse de Roy Fielding).

image

Nous avons ensuite parcouru les implémentations proposées par Microsoft et Noelios, en présentant des implémentations permettant de parcourir et mettre à jour une liste de clients :

WCF : depuis la version 3.5, WCF propose un binding adapté au style REST (WebHttpBinding) qui permet de construire ses URI (URI template), de définir ses styles de représentation (XML, JSON…) et de spécifier ses Méthodes (GET, PUT, POST, DELETE). WCF constitue ainsi une fondation pour les frameworks cités ci-après.

WCF REST Starter Kit : annoncé en octobre 2008, ce framework opensource proposé sur CodePlex implémente les scénarios REST les plus courants, à savoir exposer une ressource sous format XML ou JSON, une collection de ressources, un flux Atom… Le kit est complété de template Visual Studio.

image

 

 

 

ADO.NET Data Services : Ce framework est une extension standard de .Net 3.5 et de Silverlight 2, et une API javascript est aussi disponible. En pratique, il s’agit ici d’exposer et consommer des ressources très facilement au travers d’interfaces REST qui permettent de parcourir le graphe de ressources, avec une intégration de sources de données relationnelles au travers du framework ADO.Net Entity. Remarque : il est aussi possible d’exposer des sources de données mémoires. Ce framework est largement utilisé par les services en ligne Microsoft (notamment Azure Storage et SQL Services), et il a le gros avantage de simplifier la manipulation des ressources côté client au travers d’une API dédiée (qui permet de s’affranchir de l’écriture de requêtes REST, mais aussi de la gestion des états des données – notion de “Unit of Work / Persistance Unit” pour les familiers de TopLink / JPA). Les flux échangés sont de type Atom pour les collections et possibilité de choisir XML/JSON pour les éléments atomiques.

Restlet : le framework opensource Java de Noelios a la caractéristique d’implémenter l’ensemble du paradigme REST, en étant nativement orienté Composants et Connecteurs. En pratique, une application expose des Ressources qui proposent des représentations.

Nous avons ensuite présenté une synthèse qui positionne ces implémentations. Remarque : s’il est possible d’accéder en REST à l’API ADO.NET Data Services, cette communication sera simplifiée si on utilise une API client ADO.NET Data Services.

image

Figure : Synthèse REST en environnement hétérogène 

Nous avons conclu en présentant 2 scénarios d’interopérabilité :

  • Une application Silverlight qui accède à des ressources REST exposées en Java Restlet. Dans la mesure où la technologie Silverlight limite les méthodes HTTP à POST et GET, nous avons du surcharger l’URI de mise à jour avec une extension Restlet pour supporter le PUT (?method=PUT). Pour une meilleure interopérabilité, je vous invite à utiliser l’extensibilité HTTP au travers d'un header X-HTTP-Method-Override.

image

  • Une intégration Restlet des queues de messages de Windows Azure, qui permet donc de manipuler les queues de messages en Java, cad, pousser et retirer des messages mais aussi créer et supprimer des queues. Cette démonstration a été réalisée grâce à l’intégration de la technologie d’authentification SharedKey et SharedKeyLite par les équipes Noelios Technologies dans les derniers builds de la version 1.2. (unstable build du 16 février).

image