Article

Comprendre REST : les principes derrière une API web

REST décrit des contraintes d’architecture pour faire évoluer clients et serveurs. HTTP et JSON ne suffisent pas : les liens, le cache et les contrats comptent.

Une API renvoie des commandes en JSON et utilise GET ou POST. Ces choix ne disent pas encore comment ses clients découvrent les actions, utilisent le cache ou résistent aux évolutions du serveur. REST décrit cet ensemble de règles d'architecture. Comprendre leur rôle permet de choisir ce que votre API doit garantir, au-delà du format de ses réponses.
À gauche, l'idée reçue : REST réduit à HTTP, JSON et verbes. À droite, le style REST : six contraintes empilées dont l'interface uniforme est la clé de voûte, conférant couplage minimal et évolutivité.
À gauche, des pratiques courantes d’API HTTP. À droite, les contraintes du style REST, dont l’interface uniforme et l’hypermédia.

Un style d'architecture est un ensemble de contraintes

Un style d'architecture est un ensemble de règles choisies pour obtenir certaines propriétés. REST, pour Representational State Transfer, décrit notamment la séparation entre clients et serveurs, l'usage du cache et une interface commune. Roy Fielding l'a formalisé dans sa thèse publiée en 2000.

Le travail de Fielding accompagne l'évolution du Web et de HTTP dans les années 1990. Sa thèse décrit comment les contraintes ont guidé ces choix. Cette histoire aide à comprendre pourquoi le navigateur, les liens et les intermédiaires réseau occupent autant de place dans REST.

Fielding a participé aux spécifications de HTTP et des URI, les identifiants des ressources. REST met en relation leurs mécanismes avec les propriétés recherchées : permettre à des composants développés séparément de communiquer et d'évoluer.

Pourquoi REST ne se résume pas à « du JSON sur HTTP »

HTTP définit les échanges sur le réseau : méthodes, statuts et en-têtes. JSON est un format de données. REST décrit l'organisation du système. Une API peut utiliser HTTP et JSON sans respecter toutes les contraintes de REST.

  • Du HTTP sans REST. Le RPC (appel de procédure distante) invoque une fonction sur un serveur lointain comme si elle était locale. Déguisé en requête web, à la manière des services SOAP, il utilise HTTP sans suivre le style.
  • Du REST sans JSON. Le Web, l'exemple même du style, sert d'abord du HTML.

Pour comprendre une API, examinez donc aussi les informations autour des données : règles de cache, sens des opérations et liens proposés. Elles déterminent ce qu'un client ou un intermédiaire peut faire sans connaître l'implémentation du serveur.

Les contraintes de REST répondent à des besoins concrets

Chacune retire une liberté et apporte en échange une propriété concrète.

ContrainteCe qu'elle interditCe qu'elle apporte
Client-serveurlier l'interface au stockage des donnéesles deux évoluent séparément
Sans étatun contexte de session client nécessaire, conservé entre les requêteschaque requête peut être comprise indépendamment des précédentes
Cacheabletaire la durée de validité d'une réponsedes intermédiaires répondent à la place du serveur
Interface uniformeun mode d'accès taillé pour chaque type de ressourceun client générique ; c'est la contrainte centrale du style. Fielding en nomme aussi le prix : elle « dégrade l'efficacité », puisque l'information circule sous une forme standardisée au lieu d'être ajustée au besoin
Système en couchessavoir si l'interlocuteur est le serveur ou un intermédiaireproxies, caches et pare-feu s'intercalent sans rien casser
Code à la demande (facultative)rien d'obligatoire, mais elle coûte de la visibilité : un intermédiaire ne sait plus ce que le client fera du code reçu. C'est pour cela qu'elle reste facultativele serveur étend le client après coup, par exemple avec le JavaScript d'une page

Ces contraintes ont des contreparties. Une requête indépendante doit transporter le contexte nécessaire à son traitement. Le cache nécessite des indications permettant de savoir si une réponse peut être réutilisée. Une interface commune peut être moins optimisée qu'un échange taillé pour un seul client.

La contrainte « sans état » ne signifie pas que le serveur oublie les commandes ou les comptes qu'il stocke. Elle concerne l'état de session nécessaire pour comprendre la demande : le serveur doit pouvoir traiter la requête à partir de ce qu'elle fournit.

Le navigateur illustre la découverte par les liens

Le navigateur y est un client générique : il dialogue avec des milliards de serveurs qu'il n'a jamais rencontrés, sans être recompilé pour aucun. C'est possible parce que chaque réponse lui indique ce qu'il peut faire ensuite : les liens à suivre, les formulaires à soumettre.

Le client d'une « API REST » ordinaire, lui, doit connaître l'application à l'avance et écrire les URL en dur dans son code.

L'hypermédia désigne ici les liens et les formulaires présents dans les réponses. Le navigateur sait afficher une page et soumettre un formulaire ; l'utilisateur choisit l'action qui correspond à son objectif. Le serveur fournit les destinations et les contrôles disponibles.

Cette organisation réduit la dépendance aux chemins d'URL connus à l'avance. Elle ne supprime pas tous les contrats : le client doit comprendre le format des messages et le sens des relations qu'il utilise.

Je commencerais la lecture d'une API par une réponse réelle : indique-t-elle ses règles de cache, ses liens et les actions disponibles ? L'article sur l'interface uniforme et l'hypermédia montre comment ces informations guident un client.

Quelques repères sur l’évolution du terme REST

Le sens du mot s'est rétréci à mesure qu'il se répandait. L'expression circule dès 2002-2003 : Amazon appelle déjà « REST » l'interface en paramètres d'URL qu'il offre à côté de SOAP, et Tim O'Reilly rapporte alors que 85 % de l'usage passe par elle. Mais c'est à partir de 2007 qu'elle devient le mot par défaut, et une vulgarisation qui ne retient que les ressources et les verbes.

Frise chronologique : 1991 HTTP/0.9, 1999 HTTP/1.1, 2000 la thèse nomme REST, 2007 l'API REST, 2008 le rappel hypertext-driven, 2011 REST par défaut, 2015 GraphQL et gRPC, 2023 le retour de l'hypermédia.
Le terme REST a été défini en 2000. Son usage courant pour désigner des API HTTP ne reprend pas toujours l’ensemble des contraintes du style.
DateCe qui se passe
1990Tim Berners-Lee met en service au CERN le premier serveur web (nxoc01.cern.ch, plus tard info.cern.ch) et un HTTP minimal qui n'a qu'une commande : GET.
1991Le Web sort de l'équipe : diffusion générale sur les machines centrales du CERN en mai, annonce publique sur alt.hypertext le 6 août. Ce HTTP minimal restera connu sous le nom d'HTTP/0.9.
1994-1995Fielding élabore la première version du style, d'abord comme un moyen de communiquer les concepts du Web pendant l'écriture d'HTTP/1.0.
1996HTTP/1.0 (RFC 1945) met par écrit l'usage courant : un sous-ensemble interopérable de ce qui tourne déjà. Le document prévient lui-même qu'il « ne spécifie aucun standard Internet ».
1997 et 1999HTTP/1.1 est formalisé (RFC 2068), puis révisé (RFC 2616), avec Fielding comme premier auteur listé. Cache, absence d'état et interface uniforme deviennent des règles écrites.
2000La thèse publie et nomme le style. Le modèle, lui, a déjà cinq ans et a servi à écrire les protocoles qu'il décrit.
Première moitié des années 2000REST sert surtout d'argument contre les « services web » lourds (SOAP, la pile WS-*), du RPC empaqueté dans du XML. Il propose une alternative simple : des ressources, des URL et les verbes HTTP.
2007Le livre RESTful Web Services (Richardson et Ruby, O'Reilly) en donne la première synthèse. Ruby on Rails 1.2 met les routes « RESTful » au cœur d'un framework massivement adopté. Java lance la spécification JAX-RS. L'expression « API REST » s'installe, et le sens glisse.
2008Fielding publie une mise au point restée célèbre, REST APIs must be hypertext-driven, pour rappeler ce que la mode oubliait déjà. En novembre, Leonard Richardson expose à QCon une « heuristique de maturité » qui décompose les éléments d'une approche REST.
2010Martin Fowler la nomme « modèle de maturité de Richardson » et la fait connaître. Elle aide à comprendre les briques de REST ; elle ne gradue pas le respect du style, et Fowler y insiste : le niveau 3 est une condition d'entrée, pas un sommet.
Années 2010L'« API REST » devient le contrat par défaut des back-ends web et mobiles : Spring, JAX-RS, Django REST framework (2011), ASP.NET Web API (2012). JSON remplace XML. L'hypermédia, la contrainte la plus exigeante, reste presque partout de côté.
2015GraphQL et gRPC apparaissent. Leur essor s'explique en partie par ce vide.
Années 2020L'hypermédia revient par le HTML : le mouvement htmx, le livre Hypermedia Systems en 2023.

Sources

Explorer

Sur le même sujet

Choisis dans l’index d’après les étiquettes de cet article — les plus proches d’abord, hors de sa série. Rien n’est écrit à la main : un article publié demain avec les mêmes étiquettes y prendra place.

Laisser un commentaire

Elle n'est jamais affichée ni publiée. Elle sert à regrouper vos commentaires et, si vous vous inscrivez un jour avec elle, à vous les rendre.

Votre commentaire sera relu avant d'être publié.