GraphQL en Go : Guide complet de la bibliothèque gqlgen

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 gqlgen pour Go (Golang) : Création d'une API GraphQL



GraphQL est devenu le standard de facto pour la construction d'API modernes grâce à sa flexibilité et son efficacité. Dans l'écosystème Go (Golang), l'une des bibliothèques les plus puissantes et populaires pour travailler avec GraphQL est gqlgen. Elle offre aux développeurs un moyen pratique de définir des schémas, une génération automatique de code type et des performances élevées.



Qu'est-ce que gqlgen et pourquoi la choisir ?



gqlgen (abréviation de "graphql generator") est une bibliothèque pour Go qui construit un serveur GraphQL à partir d'un schéma. Sa principale caractéristique est l'approche code-first : vous décrivez le schéma dans un fichier .graphql, et la bibliothèque génère tout le code Go nécessaire (structures, interfaces pour les résolveurs). Cela évite l'écriture fastidieuse de code boilerplate et réduit le risque d'erreurs.



Avantages clés :

  • Génération automatique de code : les types, méthodes et interfaces des résolveurs sont créés à partir du schéma.
  • Sécurité des types : tous les types sont vérifiés lors de la compilation Go.
  • Performances : la bibliothèque est optimisée pour fonctionner dans des systèmes à forte charge.
  • Prise en charge des abonnements (Subscriptions) : possibilité de mettre en œuvre des fonctionnalités en temps réel via WebSocket.
  • Flexibilité : s'intègre facilement avec les bases de données, les caches et d'autres services.


Installation et configuration



Pour commencer, vous devez installer gqlgen et initialiser le projet :



// Installation de la bibliothèquego get github.com/99designs/gqlgen@latest

// Initialisation du squelette du projetgo run github.com/99designs/gqlgen init


Après avoir exécuté la commande init, la structure du projet sera créée :

  • graph/schema.graphqls — fichier contenant le schéma.
  • graph/resolver.go — résolveur racine.
  • graph/schema.resolvers.go — stubs générés pour les résolveurs.
  • server.go — point d'entrée pour démarrer le serveur.


Définition du schéma GraphQL



Dans le fichier schema.graphqls, on décrit les types, les requêtes et les mutations. Exemple de schéma pour un système de blog :



# Définition du type Usertype User {  id: ID!  name: String!  email: String!  posts: [Post!]!}

# Définition du type Posttype Post { id: ID! title: String! content: String! author: User!}

# Type racine Querytype Query { user(id: ID!): User users: [User!]! post(id: ID!): Post posts: [Post!]!}

# Type racine Mutationtype Mutation { createUser(name: String!, email: String!): User! createPost(title: String!, content: String!, authorId: ID!): Post!}


Génération de code et implémentation des résolveurs



Après avoir décrit le schéma, lancez la génération de code :



go run github.com/99designs/gqlgen generate


La bibliothèque créera des fichiers avec les structures Go et les interfaces. Il faut maintenant implémenter les résolveurs — les fonctions qui renvoient les données. Exemple d'implémentation d'un résolveur pour obtenir un utilisateur :



// graph/schema.resolvers.go (exemple d'implémentation)func (r *queryResolver) User(ctx context.Context, id string) (*model.User, error) {    // Logique pour obtenir l'utilisateur depuis la base de données    user, err := r.db.GetUserByID(ctx, id)    if err != nil {        return nil, err    }    return user, nil}

func (r *queryResolver) Users(ctx context.Context) ([]*model.User, error) { // Logique pour obtenir la liste de tous les utilisateurs return r.db.GetAllUsers(ctx)}

// Résolveur pour le champ posts de User (résolution des données imbriquées)func (r *userResolver) Posts(ctx context.Context, obj *model.User) ([]*model.Post, error) { // obj est l'objet User pour lequel les posts sont demandés

Recommendations