REST - Representational State Transfer
Un style d'architecture
Le terme a été inventé par Roy Fielding dans sa thèse de doctorat en 2000. Il est l'un des principaux auteurs de la spécification HTTP et aussi membre fondateur de la fondation Apache : il est connu pour ses travaux de développement du serveur web Apache.
REST n'est pas un standard, une technologie ou un protocole mais un style d'architecture.
Ce style d’architecture est un ensemble de contraintes qui sont appliquées aux éléments qui composent un système distribué afin d’optimiser des qualités désirées.
La séparation des tâches
Un serveur offre un ensemble de services et écoute les requêtes possibles. Un client veut exécuter un service et pour cela il va envoyer une requête vers le serveur qui va à son tour donner une suite favorable ou pas. Une séparation entre client/serveur permet aux composants d'évoluer de manière autonome, à condition que l'interface ne change pas.
La simplicité
Les interactions entre le client et le serveur doivent être sans états. L'état d’une session est donc entièrement détenu par le client et aucun contexte n’est conservé sur le serveur. Ainsi la mise en œuvre s’en retrouve simplifiée car le serveur n’a pas besoin de gérer l'utilisation des ressources à travers les différentes requêtes.
Les performances réseaux
Ne pas avoir de contexte au niveau du serveur implique que les données vont devoir être renvoyées plusieurs fois et donc les performances réseaux s’en retrouveront diminuées. Pour cela la mise en cache des données devra être nécessaire pour favoriser les montées en charge sur le serveur et diminuer le nombre d’interactions.
La généricité
Un point important dans le modèle REST est que les éléments qui composent l’architecture vont interagir entre eux au travers d’une interface uniforme. Ainsi la mise en œuvre sera indépendante du service qui sera fournit et les interactions seront simplifiées.
Pour obtenir une interface uniforme, il est nécessaire de guider le comportement des composants. Alors REST défini quatre contraintes d'interface qui sont :
- L’identification des ressources
- La manipulation des ressources par des représentations
- Des messages descriptifs de ces représentations
- Des contrôles de données pour définir le sens du message entre deux composants
Ces concepts seront abordés dans la section suivante.