WCF 3.5 : implémenter un service REST

Ronald Vasseur

Windows Communication Foundation, ou WCF, apparu avec la version 3.0 de Microsoft .Net a subi quelques évolutions et améliorations avec la version 3.5 de .Net. Une évolution notable est le support des services REST. Nous verrons au cours de cet article comment implémenter un service REST avec .Net 3.5, le langage C# et Visual Studio 2008.

- Titre : WCF 3.5 : implémenter un service REST

- Auteur : Ronald Vasseur

- Parution : 5 novembre 2008

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2008 Ronald Vasseur. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- 1. Introduction

- 2. REST, qu'est-ce que c'est ?

- 3. Implémenter un service avec REST

- 4. Conclusion

- Ressources

- Liens vers le MSDN

- Liens vers Developpez.com

1 - Introduction

Windows Communication Foundation, ou WCF, apparu avec la version 3.0 de Microsoft .Net a subi quelques évolutions et améliorations avec la version 3.5 de .Net. Une évolution notable est le support des services REST. Nous verrons au cours de cet article comment implémenter un service REST avec .Net 3.5, le langage C# et Visual Studio 2008.

Avant d'entrer dans les détails de l'implémentation il est je pense de présenter dans les grandes lignes à quoi correspond REST. Tout d'abord REST signifie " Representational state transfer " et il s'agît d'une manière d'organiser et de structure un service. Il ne s'agit en rien d'un protocole ni même d'un binding au sens WCF du terme.

2 - REST, qu'est-ce que c'est ?

REST repose sur deux éléments majeurs que sont le protocole http et les URI qui sont également à la base du fonctionnement du Web tel qu'on le connait aujourd'hui. Ce couplage fort à http n'est d'ailleurs pas un hasard puisque l'inventeur de REST, Roy Fielding, n'est autre qu'un des auteurs du protocole http. REST utilise GET, POST, PUT, DELETE… pour effectuer diverses opérations. Procéder de la sorte permet d'organiser des opérations dans un service à la manière d'un site Web standard.

REST fait en sorte que l'accès à une ressource puisse être réalisée uniquement à partir de son URI, c'est-à-dire qu'en connaissant l'URI d'une ressource l'on sera en mesure de l'accéder. REST n'utilise pas SOAP par défaut mais pourra le faire si nécessaire. Cependant REST utilise XML, ou JSON (qui est une alternative au XML pour les applications reposant des technologies JavaScript/Ajax) et comme d'habitude avec WCF cela pour être facilement paramétrer.

Il serait prétentieux de prétendre présenter REST dans un simple article, il s'agira ici de voir comment l'implémenter simplement avec WCF et .Net 3.5. Le Framework .Net 3.5 implémente grâce à WCF la version " officielle " de REST, nommée RESTful, il faut savoir qu'à l'heure actuelle il ne s'agît pas d'un standard et que les implémentations existantes peuvent varier. RESTful est cependant la recommandation de Roy Fielding.

REST se présente en complément aux services reposant sur SOAP, en effet il présente l'avantage de pouvoir employer XML mais également JSON par exemple. Lorsque XML est utilisé avec REST en lieu et place du traditionnel SOAP la quantité de données transitant sur le réseau est diminuée, en effet SOAP est très verbeux, avec REST/XML on se débarrasse des enveloppes SOAP.

3 - Implémenter un service avec REST

Voyons tout d'abord un rapide exemple d'un service WCF utilisant SOAP :

Exemple d'un service WCF utilisant SOAP

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace TestWcfServiceLibrary
{
[ServiceContract]
public interface ITestWcfService
{
[OperationContract]
[WebGet()]
Developpeur GetDeveloppeur(string value);
}

}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace TestWcfServiceLibrary
{
[DataContract]
public class Developpeur
{
[DataMember]
public string Name { get; set; }

[DataMember]
public string Firstname { get; set; }

[DataMember]
public int Age { get; set; }

}
}

Voyons maintenant comment implémenter l'équivalent avec REST. Grâce à l'architecture unifiée de WCF ce changement ne va pas entrainer de grosses modifications du code. Voici le code du même service mais cette fois ci reposant sur REST :

Implémentation de REST dans un service

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace TestWcfServiceLibrary
{
[ServiceContract]
public interface ITestWcfService
{
[OperationContract]
Developpeur GetDeveloppeur(string value);
}

}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace TestWcfServiceLibrary
{
[DataContract]
public class Developpeur
{
[DataMember]
public string Name { get; set; }

[DataMember]
public string Firstname { get; set; }

[DataMember]
public int Age { get; set; }

}
}

Autre chose à modifier, le binding dans le fichier de configuration. WCF 3.5 apporte un nouveau binding "webHttpBinding" qui est spécialement conçu pour faire communiquer des services avec REST, dans notre exemple webHttpBinding remplace basicHttpBinding.

La place de REST dans le monde des services ?
Actuellement REST est utilisé par de grands noms comme Yahoo par exemple, a l'opposé Google pour le moment mise tout sur SOAP uniquement. Chacun ayant des bonnes raisons d'utiliser telle ou telle technique, de plus chacune à des arguments à faire valoir selon les différents scénarios d'utilisation.

4 - Conclusion

Il faut garder à l'esprit que REST un style d'architecture qui s'appuie fortement sur la structure du Web et son protocole phare, http. REST utilise ce qui est implémenté dans http comme GET et POST par exemple. Bien qu'utilisant des standards, REST n'est absolument pas standardisé comme peut l'être SOAP par exemple.

Une fois de plus WCF nous montre qu'il est possible de switcher facilement entre les protocoles, les standards et autres sans pour autant devoir tout re-développer. De plus les améliorations (outil d'édition de fichiers de configuration, hôte et client générés automatiquement…) en matière de développement WCF de Visual Studio 2008 rendent de tels développements relativement aisés.

Enfin, dernier petit détail, le fait de pouvoir produire du XML ou du JSON en fait une solution particulièrement adaptée pour les applications et les sites web faisant massivement appel à JavaScript et AJAX.

Sans standardisation il sera difficile d'être massivement utilisé en entreprise ou à grande échelle. Certain géant du Web l'utilise déjà, mais cela reste loin derrière les services SOAP pour le moment. Cet article ne constituait qu'une mise en bouche sur WCF 3.5 et REST, un article est actuellement en préparation sur le sujet, rendez-vous prochainement pour la suite.

Ressources

Liens vers le MSDN

Windows Communication Foundation (WCF) REST Starter Kit
Namespace System.ServiceModel.Web

Liens vers Developpez.com

Mes articles
Mon blog
Les articles des autres rédacteurs
La rubrique .Net de Developpez.com