Qu'est-ce que REST ?
REST (Representational State Transfer) est un style d'architecture pour la conception d'API web, défini par Roy Fielding dans sa these de doctorat en 2000. Ce n'est pas un protocole mais un ensemble de contraintes architecturales. Les API conformes à ces contraintes sont dites "RESTful". REST est devenu le standard de facto pour les API web, utilise par la majorité des services en ligne.
Les six contraintes REST
REST définit six contraintes : Client-serveur (séparation des responsabilités front-end/back-end), Stateless (chaque requête contient toute l'information nécessaire, le serveur ne garde pas d'état de session), Cacheable (les réponses indiquent si elles peuvent être mises en cache), Interface uniforme (identification des ressources par URI, manipulation via representations, messages auto-descriptifs, HATEOAS), Système en couches (le client ne sait pas s'il parle au serveur final ou à un intermédiaire), et Code à la demande (optionnel, envoi de code exécutable).
Conception d'une API RESTful
Les ressources sont identifiées par des noms pluriels dans les URL : /users, /users/123, /users/123/orders. Les méthodes HTTP définissent les actions : GET (lire), POST (créer), PUT (remplacer), PATCH (modifier partiellement), DELETE (supprimer). Les codes de statut HTTP communiquent le résultat : 200 (OK), 201 (Created), 204 (No Content), 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found), 422 (Unprocessable Entity), 500 (Internal Server Error). Les réponses sont généralement en JSON.
Bonnes pratiques
Les bonnes pratiques incluent : la pagination des collections (cursor-based ou offset), le filtrage et le tri via les query parameters, le versioning de l'API (/v1/ ou via header), la documentation avec OpenAPI/Swagger, l'authentification par OAuth 2.0 ou JWT, le rate limiting avec les headers standards (X-RateLimit-*), et la gestion des erreurs avec un format standardise (RFC 7807 Problem Détails).
REST vs alternatives
GraphQL résout le sur-fetching et sous-fetching de REST mais ajoute de la complexité. gRPC utilise Protocol Buffers pour des communications haute performance entre microservices. WebSocket fournit une communication bidirectionnelle en temps réel. En pratique, REST reste le choix par défaut pour les API publiques grâce à sa simplicité, son ubiquite et l'excellent support du cache HTTP. Les architectures modernes combinent souvent plusieurs approches selon les besoins.