Qu'est-ce que GraphQL ?
GraphQL est un langage de requetes et un runtime pour les API, cree par Facebook en 2012 et rendu open-source en 2015. Contrairement aux API REST traditionnelles qui exposent des endpoints fixes avec des structures de donnees predefinies, GraphQL permet au client de demander exactement les donnees dont il a besoin en une seule requete.
Fonctionnement de GraphQL
GraphQL repose sur un schema type qui definit le contrat entre le client et le serveur. Le schema utilise le SDL (Schema Definition Language) pour decrire les types de donnees et les operations disponibles. Trois types d'operations : les Queries (lecture de donnees), les Mutations (modification de donnees), et les Subscriptions (donnees en temps reel via WebSocket). Chaque champ du schema est associe a un resolver, une fonction qui sait comment recuperer la donnee correspondante.
Avantages par rapport a REST
GraphQL resout deux problemes majeurs des API REST : le sur-fetching (recevoir plus de donnees que necessaire, par exemple un endpoint /users retournant 50 champs quand on en a besoin de 3) et le sous-fetching (devoir faire plusieurs requetes pour assembler les donnees, par exemple un appel pour l'utilisateur puis un pour ses articles). Avec GraphQL, une seule requete recupere exactement les donnees souhaitees, quelle que soit la profondeur des relations.
Ecosysteme et outils
L'ecosysteme GraphQL est riche : Apollo (client et serveur, le plus populaire), Relay (client Facebook optimise pour React), Hasura (auto-generation depuis PostgreSQL), Prisma (ORM avec generation de schema). Les outils de developpement comme GraphiQL et Apollo Studio offrent un explorateur interactif du schema avec auto-completion. Le schema est auto-documente grace au systeme d'introspection integre.
Considerations et limites
GraphQL introduit des defis specifiques : la complexite cote serveur (resolvers, probleme N+1 resolu par DataLoader), la mise en cache plus complexe (toutes les requetes sont des POST, pas de cache HTTP natif), le rate limiting plus difficile (une requete peut etre simple ou tres couteuse), et les requetes en profondeur qui peuvent surcharger le serveur (necessitant une analyse de complexite). GraphQL excelle pour les applications mobiles, les dashboards, et les API avec de nombreuses relations entre entites.