Introduction à GraphQL et Go
GraphQL est un langage de requêtes pour API qui permet aux clients d'obtenir exactement les données dont ils ont besoin, et rien de superflu. Contrairement à REST, où chaque endpoint renvoie une structure de données fixe, GraphQL offre flexibilité et contrôle. Combiné à Go (Golang) — un langage rapide, typé et simple — vous obtenez un outil puissant pour créer des services web modernes.
Dans ce tutoriel, nous allons créer une API GraphQL simple en Go à partir de zéro. Vous apprendrez à installer les dépendances, décrire le schéma, implémenter les résolveurs et lancer le serveur. L'article est destiné aux débutants, donc toutes les étapes sont expliquées en détail.
1. Préparation du projet et installation des dépendances
Avant d'écrire du code, assurez-vous d'avoir installé Go version 1.18 ou supérieure. Créez un nouveau répertoire pour le projet et initialisez le module :
mkdir graphql-go-tutorialcd graphql-go-tutorialgo mod init graphql-go-tutorialChoix de la bibliothèque : gqlgen
Il existe plusieurs bibliothèques pour travailler avec GraphQL en Go. Nous utiliserons gqlgen — un générateur de code populaire qui crée des types et des résolveurs à partir du schéma. Installez-le :
go get github.com/99designs/gqlgen@latestInitialisation de gqlgen
Exécutez la commande pour créer les fichiers par défaut :
go run github.com/99designs/gqlgen initCette commande créera plusieurs fichiers :
graph/schema.graphqls— le fichier de schéma GraphQL ;graph/resolver.go— l'ébauche des résolveurs ;server.go— le point d'entrée du serveur ;gqlgen.yml— la configuration de génération.
2. Description du schéma GraphQL
Ouvrez le fichier graph/schema.graphqls. Par défaut, il contient déjà un exemple avec le type Todo. Nous allons l'étendre en ajoutant le type User et quelques requêtes.
Remplacez le contenu du fichier par ce qui suit :
type User { id: ID! name: String! email: String!}
type Todo { id: ID! text: String! done: Boolean! user: User!}
type Query { todos: [Todo!]! users: [User!]! user(id: ID!): User}
type Mutation { createTodo(text: String!, userId: ID!): Todo! markDone(id: ID!): Todo!}Ici, nous avons défini :
- User — un utilisateur avec les champs id, name, email.
- Todo — une tâche avec les champs id, text, done et une référence à l'utilisateur.
- Query — les points d'entrée pour la lecture des données.
- Mutation — les opérations pour modifier les données.
3. Génération du code et implémentation des résolveurs
Après avoir décrit le schéma, il faut générer le code Go. Exécutez :
go run github.com/99designs/gqlgen generateCela créera les fichiers models_gen.go et mettra à jour resolver.go. Ouvrez maintenant graph/resolver.go.
Ajout du stockage de données
Pour simplifier, nous stockerons les données en mémoire. Ajoutez la structure dans resolver.go :
type Resolver struct { Users []*model.User Todos []*model.Todo}N'oubliez pas d'importer le package model.
Implémentation des requêtes (Query)
Recherchez les méthodes générées pour Query. Implémentons-les :
func (r *queryResolver) Todos(ctx context.Context) ([]*model.Todo, error) { return r.Resolver.Todos, nil}
func (r *queryResolver) Users(ctx context.Context) ([]*model.User, error) { return r.Resolver.Users, nil}
func (r *queryResolver) User(ctx context.Context, id string) (*model.User, error) { for _, u := range r.Resolver.Users { if u.ID == id { return u, nil } } return nil, fmt.Errorf("user not found")}
Blogs
Book Recommendations
Lire aussi
Code review en C++ : que vérifier pour que le code n'explose pas
Comment devenir développeur Go : conseils et CV
WebAssembly et TypeScript : accélérer le web sans douleur
TypeScript à partir de zéro en 2025 : guide complet pour débutants
Subject vs BehaviorSubject en TypeScript : principales différences