API GraphQL avec Go : tutoriel pas à pas pour débutants

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

Introduction à GraphQL et Go



GraphQL est un langage de requête pour les API, développé par Facebook. Contrairement à REST, où chaque endpoint renvoie une structure de données fixe, GraphQL permet au client de demander uniquement les champs dont il a besoin. Cela réduit le nombre de requêtes et le volume de données transmises. Go (Golang) est un excellent choix pour créer des API hautes performances grâce à sa rapidité, son typage statique et son support intégré de la concurrence.



Dans ce tutoriel, nous allons créer une API GraphQL simple en Go pour gérer une liste de livres. Vous apprendrez à configurer le serveur, définir le schéma, écrire des résolveurs et exécuter des requêtes et des mutations.



Configuration du projet et installation des bibliothèques



Initialisation du module Go



Créez un nouveau répertoire pour le projet et initialisez le module :



mkdir graphql-go-tutorialcd graphql-go-tutorialgo mod init graphql-go-tutorial


Installation de la bibliothèque graphql-go



Nous utiliserons la bibliothèque populaire graphql-go/graphql. Installez-la avec la commande :



go get github.com/graphql-go/graphqlgo get github.com/graphql-go/handler


La première bibliothèque fournit le cœur de GraphQL, et la seconde un gestionnaire HTTP pour l'intégration avec le serveur web.



Création de la structure de données et du schéma GraphQL



Définition du type Book



Créez le fichier main.go et commencez par définir la structure de données du livre et le type GraphQL correspondant :



package main

import ( "github.com/graphql-go/graphql" "github.com/graphql-go/handler" "net/http")

// Book — structure de données du livretype Book struct { ID string `json:"id"` Title string `json:"title"` Author string `json:"author"` Year int `json:"year"`}

// Définition du type GraphQL pour le livrevar bookType = graphql.NewObject( graphql.ObjectConfig{ Name: "Book", Fields: graphql.Fields{ "id": &graphql.Field{Type: graphql.String}, "title": &graphql.Field{Type: graphql.String}, "author": &graphql.Field{Type: graphql.String}, "year": &graphql.Field{Type: graphql.Int}, }, },)


Création de la requête racine (Query)



Ajoutons un stockage en mémoire des livres et une requête racine pour obtenir la liste et un livre spécifique :



// Simulation de base de donnéesvar books = []Book{    {ID: "1", Title: "Guerre et Paix", Author: "Léon Tolstoï", Year: 1869},    {ID: "2", Title: "Crime et Châtiment", Author: "Fiodor Dostoïevski", Year: 1866},    {ID: "3", Title: "Le Maître et Marguerite", Author: "Mikhaïl Boulgakov", Year: 1967},}

// Requête racinevar queryType = graphql.NewObject( graphql.ObjectConfig{ Name: "Query", Fields: graphql.Fields{ "books": &graphql.Field{ Type: graphql.NewList(bookType), Resolve: func(p graphql.ResolveParams) (interface{}, error) { return books, nil }, }, "book": &graphql.Field{ Type: bookType, Args: graphql.FieldConfigArgument{ "id": &graphql.ArgumentConfig{Type: graphql.String}, }, Resolve: func(p graphql.ResolveParams) (interface{}, error) { id, _ := p.Args["id"].(string) for _, book := range books { if book.ID == id { return book, nil } } return nil, nil }, }, }, },)


Ajout des mutations (Mutation)



Les mutations permettent de modifier les données. Ajoutons la possibilité d'ajouter de nouveaux livres :



// Mutation pour ajouter un livrevar mutationType = graphql.NewObject(

Blogs

Book Recommendations