Pour mieux comprendre la suite de cet article, il faut savoir ce qu’est REST. REST est l’acronyme de “Representational State Transfer”.
Afin de mieux comprendre ce qu'est le REST, commençons par un bref historique. Le REST est l'acronyme de "Representational State Transfer" inventé par Roy T. Fielding . Roy T. Fielding participe de puis 1994 aux travaux du W3C sur les sujets URI, HTTP, HTML et WebDAV et a été le co-fondateur du projet Apache . REST décrit les caractéristiques du Web qui en ont fait son succès. L'explication de la signification de REST telle que donnée par Roy T. Fielding est la suivante : "Representational State Transfer évoque l'image du fonctionnement d'une application Web bien construite : un réseau de pages Web (une machine à états finis virtuelle) où l'utilisateur progresse dans l'application en cliquant sur des liens (transition entre états) ce qui provoque l'affichage de la page suivante (représentant le nouvel état de l'application) à l'utilisateur qui peut alors l'exploiter".
Cependant, il faut faire attention, Le REST est un style d’architecture logiciel, c’est l’architecture originelle du web et non un standard.
Donc, il n'existe pas de spécifications de REST. Il faut d'abord déterminer comment fonctionne le style REST avant de vouloir concevoir des applications ou des services web. Bien que REST ne soit pas un standard, il utilise des standards. En particulier :
URI comme syntaxe universelle pour adresser les ressources,
HTTP un protocole sans état (stateless) avec un nombre très limité d'opérations,
Des liens hypermedia dans des documents (X)HTML et XML pour représenter à la fois le contenu des informations et la transition entre états de l'application,
Les types MIME comme text/xml, text/html, image/jpeg, application/pdf, video/mpeg pour la représentation des ressources.
REST concerne l'architecture globale d'un système. Il ne définit pas la manière de réaliser dans les détails. En particulier, des services REST peuvent être réalisés en .NET, JAVA, CGI ou COBOL. Vous avez sans doute déjà réalisé des services REST sans le savoir.
Pour la suite de cette article, il faut comprendre plusieurs points :
Le Content-Type ou MIME Type est très important puisque c'est lui qui est utilisé par le navigateur pour déterminer le type du fichier, pas l'extension. C'est en fonction de ce type de fichier que le navigateur déterminera l'action à accomplir (visualisation, téléchargement, etc..). Lorsque la même ressource existe sous plusieurs représentations ou plusieurs langages, il est aussi possible à l'agent utilisateur de "négocier" avec le serveur la représentation qui sera fournie. Les types MIME sont attribués par l'IANA .
L’uri ou Uniform Ressource Identifier est une courte chaîne de caractère qui va permettre d’identifier une ressource de manière permanente sur un réseau, physique ou abstraite, même si la ressource est déplacée ou supprimée. Les URI se composent de 2 sous-ensembles URL et URN dont la syntaxe détaillée est décrite ici . Connaître l’URI suffit pour agir sur la ressource.
Cette notion d'URI est fondamentale car c'est le système global et unique d'identification du Web. L'URI est la pierre angulaire de l'architecture Web. Le système d'URI a été largement déployé depuis les débuts du Web et les avantages des URI sont nombreux : liens, favoris, mécanismes de cache, indexation par les moteurs de recherches. En utilisant les URI, il est possible de déployer une application partout dans le monde sans infrastructure additionnelle comme des annuaires ou des "registries". Déployer un autre système de nommage qui aurait les mêmes propriétés que les URI serait très coûteux.
HTTP va fournir les opération nécessaires à la manipulation de la ressource :
De ces grands thèmes découlent quelques grands principes :
Enfin, il ne faut pas oublier qu'une architecture REST se doit d'être "stateless", c'est à dire que chaque transaction, ou chaque action doit être traitée de manière indépendante. Par exemple, l'architecture REST ne permet pas de définir un flux d'action. C'est au client utilisant cette architecture de la définir comme il le souhaite.
Le succès de l'Internet a engendré une pléthore de concepts, de sigles et de promesses dans le domaine de l'architecture des systèmes. Voici quelques définitions pour s'y retrouver.
Le terme Services Web a été introduit pour indiquer une interaction entre machines qui ne nécessite pas d'intervention humaine. Les machines parlent aux machines. La plupart des autres concepts ont été inventés pour "standardiser" ce dialogue.
XML fournit une syntaxe unique pour les données sans adhérence avec un logiciel particulier. XML présente comme HTML la particularité de véhiculer les données ET leur description. Ce "gaspillage" s'est révélé très efficace. XSLT et CSS permettent de transformer et de présenter les données XML en fonction de leur usage. Plus de détails...
SOA ou Architecture orientée Services est un style d'architecture destiné à fournir un couplage lâche (loose coupling) entre les composants d'un système. Un service est une fonction métier sans état (stateless) qui accepte des demandes et renvoie des réponses au travers d'un interface bien défini. Les services ne doivent pas dépendre de l'état d'autres fonctions ou services. C'est ce qui permet de les combiner (orchestration) pour obtenir des traitements plus complexes. Il ne suffit pas de découper un système en blocs fonctionnels indépendants pour obtenir une architecture orientée services. Il faut aussi décrire les mécanismes de nommage, d'adressage et d'échange qui permettent ce découplage. Sur le modèle Client Serveur, un exemple de succès est le RSS (plus de détails...) qui permet un découplage parfait entre le producteur et le consommateur de données alors que CORBA/DCOM sont des échecs sérieux.
L'EAI est un ensemble d'outils et de méthodes destiné à consolider, moderniser et coordonner les applications existantes dans une entreprise. Trop souvent, ces outils ne font qu'ajouter une couche supplémentaire de logiciels sans diminuer la complexité des systèmes. Le meilleur EAI que je connaisse est tout simplement XML+HTTP.
SOAP est un style d'architecture qui permet d'échanger des messages XML entre applications selon le modèle RPC (Remote Procedure Call). SOAP ne respecte ni le style REST ni même le style SOA puisque c'est un moyen de véhiculer des interfaces RPC spécifiques d'une application dans un tuyau standard. Il est donc à terme condamné à s'aligner ou à disparaître. Voir ici pourquoi SOAP est quand même un standard W3C : édifiant! Si l'interopérabilité avec SOAP est indispensable, il est facile d'ajouter des connecteurs SOAP sur une architecture REST. Il est à noter que de nombreux vendeurs "poussent" SOAP car très proche des anciens concepts et essaient de lui trouver une "raison d'être" face à REST . La démonstration est très loin d'être convaincante.
Roy Fielding précise dans sa thèse les avantages de ce style d'architecture. Citons par exemple :
Cependant comme toutes choses, des contraintes existes sur ce types d'architectures :
Cependant, malgré les contraintes de REST, beaucoup d'application se sont largement inspirées par elle.
Cet ensemble de grands principes architecturaux vont vous permettre de mettre en place facilement une API REST.
Une API doit vous permettre d'utiliser les ressources d'une application web depuis une autre application (web ou non). De nombreux formats d'échanges ont été inventés. On peut citer SOAP et XML-RPC pour ce qui concerne les plus connus. Pourtant, REST s'est aujourd'hui imposé comme un standard de fait. Cela tiens à plusieurs raisons : sa simplicité d'utilisation, le fait que REST ne fait usage que du protocole HTTP, requêtes sans état (ou stateless comme nous venons de le voir).
Aujourd'hui, des entreprise comme Google, Twitter ou facebook en font usage pour leur API publique. Et REST ne cesse de se démocratiser
Pour mettre en place une interface REST avec le framework Django, il existe plusieurs possibilités :
Django Piston est une application Django qui permet de mettre en place facilement une API REST sur un projet Django. Il implémente oauth pour l’authentification (qui est le standard pour les API REST) et est utilisé notamment par Libération et Bitbucket.
Django Tastypie est le concurrent directe de django-piston, jugé plus avancé que son concurrent, il propose une sérialisation “out of the box” des données et est particulièrement performant quand l’API à mettre en place est proche du modèle de donnée.
Actions sur le document