API REST vs GraphQL : lequel choisir pour votre projet ?
REST domine les API web depuis 20 ans. GraphQL, créé par Facebook en 2015, promet de résoudre ses limites. En 2026, le choix n'est pas binaire — il dépend de votre architecture, de vos clients API et de vos contraintes de performance.
Adapté à toute taille de structure
#API REST vs GraphQL : lequel choisir pour votre projet ?
TL;DR — REST couvre 80 % des besoins API en 2026 avec un coût d'entrée minimal. GraphQL prend l'avantage quand plusieurs clients consomment la meme API avec des besoins de donnees differents, ou quand l'agregation de sources multiples est necessaire. Le choix n'est pas binaire : l'architecture hybride (BFF GraphQL + microservices REST) est le pattern dominant chez les scale-ups.
Quand un developpeur dit « on a besoin d'une API », la question qui suit immediatement est : REST ou GraphQL ? Ce choix architectural a des consequences durables sur la complexite du developpement, la performance de l'application, la maintenabilite du code et la capacite a evoluer.
REST (Representational State Transfer) est le standard de facto des API web depuis le milieu des annees 2000. Simple, base sur les verbes HTTP (GET, POST, PUT, DELETE), supporte par tous les langages et frameworks, il a fait ses preuves sur des milliards d'API en production.
GraphQL, cree par Facebook en 2012 et open-source en 2015, prend le probleme differemment. Au lieu d'exposer des endpoints predefinis, il expose un schema type que le client interroge avec un langage de requete flexible. Le client demande exactement les donnees dont il a besoin — ni plus, ni moins.
En 2026, la realite du marche est que REST reste largement dominant (plus de 80 % des API publiques selon Postman State of APIs 2025), mais GraphQL a conquis des niches significatives : applications multi-clients (web + mobile + partenaires), agregation de donnees de sources multiples, et experiences front-end complexes.
Cet article compare les deux approches sur 8 dimensions techniques et vous donne une matrice de decision claire. L'objectif n'est pas de prouver la superiorite de l'un sur l'autre — c'est de vous aider a choisir l'API adaptee a votre contexte.
#Over-fetching et under-fetching : le probleme fondamental
Le probleme avec REST
Une API REST expose des endpoints qui retournent des ressources completes. L'endpoint /api/users/42 retourne toutes les proprietes de l'utilisateur : nom, email, adresse, historique des commandes, preferences, avatar. Si votre page d'accueil n'a besoin que du nom et de l'avatar, vous recevez quand meme toutes les donnees — c'est l'over-fetching.
L'inverse existe aussi : si votre page de profil a besoin de l'utilisateur ET de ses 10 dernieres commandes, vous devez faire 2 appels API separes (/api/users/42 puis /api/users/42/orders) — c'est l'under-fetching, qui multiplie les requetes reseau.
Sur un reseau rapide (fibre, WiFi), l'impact est negligeable. Sur un reseau mobile 4G avec 100 ms de latence par requete, chaque appel supplementaire se paie en temps de chargement perceptible par l'utilisateur.
La solution GraphQL
GraphQL resout ces deux problemes elegamment. Le client specifie exactement les champs dont il a besoin dans sa requete. Pour obtenir le nom, l'avatar et les 10 dernieres commandes d'un utilisateur, une seule requete GraphQL suffit — et elle ne retourne que ces champs, rien de plus.
Cette flexibilite est particulierement precieuse quand plusieurs clients consomment la meme API avec des besoins differents. L'application mobile a besoin d'un sous-ensemble leger des donnees. L'application desktop a besoin de donnees enrichies. Le dashboard admin a besoin de tout. Avec REST, il faut soit creer des endpoints specifiques par client, soit accepter l'over-fetching. Avec GraphQL, chaque client formule la requete adaptee a son besoin.
Le contrepoint
REST n'est pas demuni face a ce probleme. Les query parameters (?fields=name,avatar), la pagination, et les patterns comme JSON:API permettent de controler partiellement les donnees retournees. C'est moins elegant que GraphQL, mais ca fonctionne. Et surtout, ca ne necessite pas d'apprendre un nouveau langage de requete.
#Schema type et introspection : la force de GraphQL
Le schema GraphQL
GraphQL impose un schema type qui decrit exhaustivement les types de donnees, les relations entre eux, et les operations disponibles (queries, mutations, subscriptions). Ce schema est le contrat entre le serveur et le client — il est versionne, documente et verifiable a la compilation.
L'introspection native permet a n'importe quel client d'interroger le schema pour decouvrir les types disponibles, les champs, les arguments et les descriptions. Des outils comme GraphiQL ou Apollo Studio exploitent cette introspection pour offrir une auto-completion en temps reel, une documentation interactive, et une validation des requetes avant envoi.
Pour les equipes de developpement, c'est un gain de productivite majeur. Le developpeur front-end n'a pas besoin de lire la documentation API (qui est souvent obsolete) — il explore le schema directement dans son IDE. Les erreurs de typage sont detectees a la compilation, pas en production.
REST et la documentation
REST n'a pas d'equivalent natif. La documentation repose sur des standards comme OpenAPI/Swagger, qui decrivent les endpoints, les parametres et les reponses. C'est efficace, mais la documentation est separee du code — elle peut diverger si elle n'est pas generee automatiquement. Des outils comme API Platform (Symfony) ou tRPC (TypeScript) reduisent cet ecart en generant la documentation automatiquement depuis le code.
Le cout du schema GraphQL
Le schema type est un avantage en maintenabilite, mais un cout en developpement initial. Definir un schema GraphQL complet pour une application metier (types, relations, resolveurs, validations, autorisations) prend plus de temps que d'exposer des endpoints REST avec un framework comme API Platform ou Express. Sur un MVP ou un projet a cycle court, ce surcout peut ne pas etre justifie.
#Caching et performance : l'avantage REST
Le caching HTTP natif de REST
REST s'appuie sur le protocole HTTP et beneficie de toute son infrastructure de caching. Les reponses GET peuvent etre mises en cache par le navigateur, les CDN (Cloudflare, Fastly), les reverse proxies (Nginx, Varnish) et les caches applicatifs (Redis). Les headers HTTP standards (Cache-Control, ETag, Last-Modified) permettent un controle fin de la duree de vie et de la validation du cache.
Ce caching est transparent : il fonctionne sans code supplementaire cote client ou serveur. Un endpoint REST qui retourne une liste de produits peut etre cache par un CDN pendant 5 minutes, reduisant la charge serveur de 95 % sur les pages a fort trafic.
Le probleme du caching GraphQL
GraphQL utilise un seul endpoint POST pour toutes les requetes. Les CDN et les caches HTTP ne peuvent pas cacher les requetes POST nativement — chaque requete est consideree comme unique. Le caching GraphQL necessite des solutions specifiques : cache au niveau du resolveur (DataLoader pour le batching et le caching par requete), cache au niveau du client (Apollo Client avec normalized cache), ou des solutions de caching GraphQL dediees (Stellate, anciennement GraphCDN).
Ces solutions fonctionnent, mais elles ajoutent de la complexite d'infrastructure et de developpement. Pour une API publique a fort trafic (catalogue produit, contenu editorial), l'absence de caching HTTP natif est un desavantage significatif de GraphQL.
Performances brutes
Sur les requetes simples (un seul type de donnees, peu de relations), REST est legerement plus performant — moins d'overhead de parsing de requete, caching HTTP natif. Sur les requetes complexes (donnees imbriquees, relations multiples), GraphQL peut etre plus performant car il evite les appels multiples — mais le risque de requetes N+1 cote serveur est reel si les resolveurs ne sont pas optimises.
Le probleme N+1 en GraphQL : quand un client demande une liste de 100 utilisateurs avec leurs commandes, un resolveur naif va executer 1 requete pour les utilisateurs + 100 requetes pour les commandes. DataLoader resout ce probleme par le batching, mais il faut le configurer explicitement — ce n'est pas automatique.
#Subscriptions et temps reel : GraphQL natif vs REST + WebSocket
Les subscriptions GraphQL
GraphQL inclut nativement le concept de subscriptions : le client s'abonne a un type d'evenement et recoit les mises a jour en temps reel via WebSocket. La syntaxe est integree au schema : les subscriptions sont declarees comme les queries et mutations, avec le meme typage et les memes autorisations.
Pour une application qui necessite du temps reel (notifications, mises a jour de tableau de bord, chat, suivi de commande), les subscriptions GraphQL offrent une experience de developpement coherente : le meme langage de requete pour la lecture initiale et les mises a jour en temps reel.
REST et le temps reel
REST ne propose pas de mecanisme de temps reel natif. Les solutions les plus courantes sont les WebSockets (connexion bidirectionnelle), les Server-Sent Events (SSE, flux unidirectionnel du serveur vers le client), et le polling (le client interroge le serveur a intervalle regulier).
Ces solutions fonctionnent, mais elles sont separees de l'API REST — c'est un autre protocole, une autre couche d'infrastructure, souvent un autre framework. Le contrat de donnees entre les evenements temps reel et les reponses REST n'est pas unifie.
En pratique
Le besoin de temps reel est souvent surestime dans les projets B2B. Un tableau de bord qui se rafraichit toutes les 30 secondes par polling REST est suffisant pour 90 % des cas d'usage. Les subscriptions GraphQL sont un avantage differenciant quand le temps reel est au coeur du produit (collaboration en temps reel, monitoring live, trading).
En 2026, les Server-Sent Events (SSE) gagnent en popularite comme alternative legere aux WebSockets pour le temps reel unidirectionnel. Supportes nativement par les navigateurs et compatibles avec HTTP/2, les SSE fonctionnent aussi bien avec REST qu'avec GraphQL.
#Comparatif synthetique : REST vs GraphQL sur 8 dimensions
| Dimension | REST | GraphQL |
|---|---|---|
| Over-fetching | Oui (contournable avec fields) | Non (requete selective) |
| Under-fetching | Oui (appels multiples) | Non (requete unique) |
| Schema type | Non natif (OpenAPI) | Oui natif |
| Caching HTTP | Natif et transparent | Complexe (endpoint unique POST) |
| Temps reel | WebSocket/SSE separes | Subscriptions natives |
| Courbe d'apprentissage | Faible | Moderee a elevee |
| Tooling ecosysteme | Universel | Riche mais specialise |
| Multi-clients | Endpoints specifiques ou over-fetching | Un schema, N clients |
#Quand choisir REST et quand choisir GraphQL : matrice de decision
Choisissez REST si :
- Votre API est un CRUD simple avec des ressources bien definies et peu de relations imbriquees.
- Votre API est publique ou exposee a des partenaires externes. REST est universellement compris, documentable avec OpenAPI/Swagger.
- Le caching est critique pour votre performance. Les API a fort trafic beneficient massivement du caching HTTP natif.
- Votre architecture est en microservices. Chaque microservice expose sa propre API REST — c'est le pattern dominant.
- Votre equipe n'a pas d'experience GraphQL. La courbe d'apprentissage represente un investissement de 2 a 4 semaines.
Choisissez GraphQL si :
- Plusieurs clients consomment la meme API avec des besoins differents (web, mobile, partenaires, dashboard).
- Votre application agregre des donnees de sources multiples. Un BFF GraphQL unifie ces sources derriere un schema unique.
- Votre front-end affiche des donnees fortement imbriquees avec de nombreuses relations.
- Le temps reel est au coeur de votre produit.
- Votre equipe front-end veut une experience de developpement optimale. L'ecosysteme GraphQL (Apollo Client, Relay, codegen TypeScript) offre un DX superieur pour les applications React/Next.js complexes.
La recommandation Nehos
Pour les nouvelles applications B2B, on demarre avec REST (via API Platform sur Symfony ou les route handlers Next.js) sauf si l'un des criteres pro-GraphQL est clairement dominant. La raison : REST est plus simple a mettre en oeuvre, plus simple a cacher, plus simple a maintenir, et couvre 80 % des besoins sans compromis. GraphQL est un outil puissant, mais il ajoute de la complexite qui doit etre justifiee par un gain concret.
#Cas concret : architecture hybride BFF GraphQL + microservices REST
L'approche que l'on deploie le plus souvent chez Nehos pour les applications B2B a forte complexite front-end est l'architecture BFF (Backend For Frontend). Le principe : un serveur GraphQL cote front-end qui agregre les donnees de plusieurs microservices REST en backend.
Le front-end React/Next.js interroge le BFF GraphQL avec des requetes adaptees a chaque page (exactement les champs necessaires, en une seule requete). Le BFF GraphQL appelle les microservices REST en backend (service utilisateurs, service commandes, service facturation) et assemble la reponse.
Cette architecture combine le meilleur des deux mondes : la flexibilite GraphQL pour le front-end, la simplicite et le caching REST pour les microservices. C'est l'architecture utilisee par Netflix, Shopify et GitHub.
En termes de cout, un BFF GraphQL ajoute 3 a 5 jours de developpement initial par rapport a une API REST directe. Mais il economise 20 a 30 % du temps de developpement front-end sur le long terme, grace a la reduction des appels API et a la simplicite de la gestion des donnees cote client.
#Le verdict 2026
Le choix REST vs GraphQL n'est pas une question de superiorite technique — c'est une question d'adequation au contexte. Les deux technologies coexistent dans la meme architecture, et les meilleurs systemes en production utilisent chacune la ou elle excelle.
Si vous demarrez un nouveau projet et hesitez, posez-vous une seule question : est-ce que plusieurs clients (web, mobile, partenaires) vont consommer mon API avec des besoins de donnees significativement differents ? Si oui, GraphQL merite l'investissement. Si non, REST vous emmene plus vite en production avec moins de complexite.
Chez Nehos, on ne choisit jamais par defaut. On analyse le contexte client — architecture existante, competences d'equipe, contraintes de performance, roadmap produit — et on recommande l'approche la plus rentable sur 3 ans. Pas la plus a la mode. Pas la plus flatteuse sur un CV. La plus adaptee au business.