Fonctionnement de base de GraphQL
.
Les concepts clés :
GraphQL s’articule autour de plusieurs concepts fondamentaux :
- Schéma (Schema) : Le cœur de GraphQL. Il définit la structure des données, leurs types et les opérations disponibles pour les requêtes, mutations et abonnements.
- Types : GraphQL repose sur un typage fort, comprenant des types de base (scalars) comme
String
,Int
, et des types personnalisés pour représenter des objets plus complexes. - Requêtes (Query) : Une méthode pour récupérer les données. Contrairement à REST, vous spécifiez exactement ce que vous voulez et dans quelle structure.
- Mutations : Utilisées pour modifier les données (ajouter, mettre à jour, supprimer).
- Subscriptions : Permettent de recevoir des mises à jour en temps réel, souvent via WebSockets.
Workflow général :
- Définir un schéma : Le développeur crée un schéma décrivant toutes les données disponibles et leurs relations.
- Faire des requêtes : Le client construit des requêtes en utilisant le langage de requête GraphQL, clair et auto-documenté.
- Résoudre les données : Le serveur utilise des resolvers, des fonctions qui déterminent comment obtenir les données demandées, en interagissant souvent avec une base de données ou une autre API.
- Recevoir une réponse structurée : Le serveur retourne les données au client dans un format JSON, selon la structure demandée.
Exemple simplifié :
Imaginons une base de données contenant des utilisateurs. En GraphQL :
- Une requête pour obtenir le nom et l’e-mail d’un utilisateur pourrait ressembler à :
query { user(id: 1) { name email } }
- La réponse JSON :
{ "data": { "user": { "name": "Alice", "email": "alice@example.com" } } }
Avantages de ce fonctionnement :
- Précision : Demander uniquement les champs nécessaires.
- Flexibilité : Adapter les requêtes sans modifications majeures côté serveur.
- Unification : Accéder à plusieurs sources de données avec une seule API.
Dans les sections suivantes, nous explorerons en détail ces concepts pour mieux comprendre comment exploiter GraphQL dans des projets concrets.