Qu'est-ce que GraphQL ?
GraphQL est un langage de requêtes et un runtime pour les API, créé par Facebook en 2012 et rendu open-source en 2015. Contrairement aux API REST traditionnelles qui exposent des endpoints fixes avec des structures de données prédéfinies, GraphQL permet au client de demander exactement les données dont il a besoin en une seule requête.
Fonctionnement de GraphQL
GraphQL repose sur un schéma type qui définit le contrat entre le client et le serveur. Le schéma utilise le SDL (Schéma Définition Language) pour décrire les types de données et les opérations disponibles. Trois types d'opérations : les Queries (lecture de données), les Mutations (modification de données), et les Subscriptions (données en temps réel via WebSocket). Chaque champ du schéma est associe à un resolver, une fonction qui sait comment récupérer la donnée correspondante.
Avantages par rapport à REST
GraphQL résout deux problèmes majeurs des API REST : le sur-fetching (recevoir plus de données que nécessaire, par exemple un endpoint /users retournant 50 champs quand on en a besoin de 3) et le sous-fetching (devoir faire plusieurs requêtes pour assembler les données, par exemple un appel pour l'utilisateur puis un pour ses articles). Avec GraphQL, une seule requête récupère exactement les données souhaitees, quelle que soit la profondeur des relations.
Écosystème et outils
L'écosystème GraphQL est riche : Apollo (client et serveur, le plus populaire), Relay (client Facebook optimise pour React), Hasura (auto-generation depuis PostgreSQL), Prisma (ORM avec génération de schéma). Les outils de développement comme GraphiQL et Apollo Studio offrent un explorateur interactif du schéma avec auto-completion. Le schéma est auto-documente grace au système d'introspection integre.
Considerations et limites
GraphQL introduit des défis spécifiques : la complexité cote serveur (resolvers, problème N+1 resolu par DataLoader), la mise en cache plus complexe (toutes les requêtes sont des POST, pas de cache HTTP natif), le rate limiting plus difficile (une requête peut être simple ou très couteuse), et les requêtes en profondeur qui peuvent surcharger le serveur (nécessitant une analyse de complexité). GraphQL excelle pour les applications mobiles, les dashboards, et les API avec de nombreuses relations entre entités.