GraphQL est un langage de requête pour API, créé par Facebook en 2015 et open-sourcé en 2018. Au lieu d'exposer plusieurs endpoints REST (`/users`, `/users/:id/posts`, `/users/:id/posts/:id/comments`), GraphQL expose un seul endpoint où le client envoie une requête déclarative décrivant exactement les champs qu'il veut, en profondeur. Le serveur renvoie un JSON qui colle pile au shape demandé — ni plus, ni moins. Tout repose sur un schéma typé (types, enums, relations) défini côté serveur, qui sert à la fois de documentation, de contrat client/serveur et de base d'auto-complétion dans les IDE.
Le sweet spot de GraphQL, c'est l'inverse des limites d'une API REST : fini le sur-fetching (récupérer 30 champs pour en afficher 3) et le sous-fetching (chaîner 5 appels REST pour reconstituer une vue). Sur une app mobile ou une UI complexe avec des entités très liées (e-commerce avec produits/variantes/avis/stocks, dashboard analytics, app sociale), GraphQL réduit drastiquement le nombre de roundtrips et la bande passante. Côté équipes, il découple le front du back : le front itère sans demander de nouveaux endpoints à chaque écran. Apollo, Relay, Hasura et URQL sont les implémentations dominantes.
Le revers : complexité serveur (résolveurs N+1, pagination, caching plus subtil que REST), sécurité (sans query depth/cost limit, un client peut faire exploser la base), et outillage de monitoring plus jeune. Pour 70 % des SaaS ou logiciels métier classiques, REST + webhooks reste plus simple et suffisant. GraphQL devient pertinent quand vous avez plusieurs clients (web + mobile + partenaires) sur un graphe complexe, ou pour un BFF qui agrège plusieurs microservices — souvent au-dessus d'une archi event-driven Kafka.
REST ou GraphQL : comment trancher
- REST par défaut pour APIs publiques simples, intégrations B2B, webhooks, microservices internes.
- GraphQL quand le front consomme un graphe complexe et que les écrans changent souvent (mobile, dashboard).
- GraphQL pour un BFF qui agrège plusieurs APIs internes en une seule façade pour le front.
- Pas GraphQL pour une API publique grand public sans rate-limiting solide — risque de requêtes coûteuses non bornées.
