Bibliothèque GraphQL Go (Golang) — un outil puissant pour créer des API
GraphQL est un langage de requête pour API qui permet aux clients de demander uniquement les données dont ils ont réellement besoin. Dans l'écosystème Go (Golang), l'une des bibliothèques les plus populaires pour travailler avec GraphQL est gqlgen (GraphQL Go Generate). Cette bibliothèque permet de créer des serveurs GraphQL typés avec un minimum de code passe-partout. Dans cet article, nous allons détailler gqlgen, son installation, sa configuration et des exemples d'utilisation.
Qu'est-ce que gqlgen ?
gqlgen est un générateur de code pour Go qui crée automatiquement des résolveurs et des types basés sur votre schéma GraphQL. Principaux avantages :
- Sécurité des types — tous les types sont vérifiés à la compilation
- Minimum de code passe-partout — la bibliothèque génère la majeure partie du code pour vous
- Flexibilité — prise en charge des abonnements, mutations et requêtes complexes
- Performances — vitesse élevée, caractéristique de Go
Installation de gqlgen
Pour commencer, installez la bibliothèque et l'utilitaire en ligne de commande :
go get github.com/99designs/gqlgengo run github.com/99designs/gqlgen initLa commande init créera une structure de projet de base avec les fichiers schema.graphqls, gqlgen.yml et le code généré.
Structure du projet
Après l'initialisation, vous obtiendrez la structure suivante :
my-graphql-app/├── gqlgen.yml # Configuration du générateur├── graph/│ ├── schema.graphqls # Schéma GraphQL│ ├── resolver.go # Résolveurs (votre code)│ └── models_gen.go # Modèles générés (ne pas modifier)├── server.go # Point d'entrée└── go.modÉcriture du schéma GraphQL
Exemple de fichier schema.graphqls pour un blog simple :
type Query { posts: [Post!]! post(id: ID!): Post}
type Mutation { createPost(input: PostInput!): Post! deletePost(id: ID!): Boolean!}
type Post { id: ID! title: String! content: String! author: String! createdAt: Time!}
input PostInput { title: String! content: String! author: String!}
scalar TimeGénération de code
Après avoir décrit le schéma, exécutez :
go run github.com/99designs/gqlgen generateCela créera les fichiers models_gen.go et generated.go avec les types et interfaces des résolveurs.
Implémentation des résolveurs
Il faut maintenant implémenter la logique dans resolver.go :
package graph
import ( "context" "time")
// Modèle de donnéestype Post struct { ID string `json:"id"` Title string `json:"title"` Content string `json:"content"` Author string `json:"author"` CreatedAt time.Time `json:"createdAt"`}
// Stockage en mémoirevar posts = []*Post{ { ID: "1", Title: "Introduction à GraphQL", Content: "GraphQL est un langage de requête...", Author: "Ivan Petrov", CreatedAt: time.Now(), },}
// Résolveur pour Query.postsfunc (r *queryResolver) Posts(ctx context.Context) ([]*Post, error) { return posts, nil}
// Résolveur pour Query.postfunc (r *queryResolver) Post(ctx context.Context, id string) (*Post, error) { for _, post := range posts { if post.ID == id { return post, nil } } return nil, nil}
// Résolveur pour Mutation.createPostfunc (r *mutationResolver) CreatePost(ctx context.Context, input PostInput) (*Post, error) { newPost := &Post{ ID: fmt.Sprintf("%d", len(posts)+1), Title: input.Title, Content: input.Content, Author: input.Author, CreatedAt: time.Now(), } posts = append(posts, newPost)