Bibliothèque GraphQL pour Go (Golang) — guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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 init


La 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 Time


Génération de code



Après avoir décrit le schéma, exécutez :



go run github.com/99designs/gqlgen generate


Cela 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)

Recommendations