Comment écrire une API REST en Go en 30 minutes : guide pas à pas

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 : Pourquoi Go est-il idéal pour les API REST ?



Go (ou Golang) est un langage de programmation compilé moderne, créé chez Google. Il combine les performances du C++ et la simplicité de Python, ce qui en fait un choix idéal pour créer des services web à forte charge et des API REST. Contrairement à de nombreux autres langages, Go intègre nativement le support du serveur HTTP, du multithreading et une compilation rapide.



Dans ce guide, nous allons créer pas à pas une API REST complète pour gérer une liste de tâches (Todo List). Vous apprendrez à :

  • Configurer un serveur HTTP en Go
  • Travailler avec des requêtes et réponses JSON
  • Implémenter les opérations CRUD (Create, Read, Update, Delete)
  • Tester l'API avec curl ou Postman


L'ensemble du processus ne vous prendra pas plus de 30 minutes. C'est parti !



1. Installation et configuration du projet



Avant d'écrire du code, assurez-vous que Go est installé. Vous pouvez le vérifier avec la commande :

go version


Si Go n'est pas installé, téléchargez la dernière version depuis le site officiel.



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

mkdir go-rest-apicd go-rest-apigo mod init go-rest-api


Créez maintenant le fichier main.go — tout notre code y sera. Pour faciliter la gestion des routes, nous utiliserons la bibliothèque standard net/http, déjà intégrée à Go. Aucune dépendance externe n'est nécessaire — c'est l'un des principaux avantages du langage.



2. Définition de la structure de données et du stockage



Commençons par décrire le modèle de données. Pour simplifier, nous stockerons les tâches en mémoire (dans une slice), et non dans une base de données. Créons la structure Task et un compteur d'ID global :



package main

import ( "encoding/json" "log" "net/http" "strconv" "strings" "sync")

// Task représente une tâchetype Task struct { ID int `json:"id"` Title string `json:"title"` Done bool `json:"done"`}

// Stockage des tâches (en mémoire)var ( tasks []Task nextID int = 1 mu sync.Mutex)


Notez l'utilisation de sync.Mutex — il est nécessaire pour un accès thread-safe aux données, car le serveur Go peut traiter les requêtes en parallèle.



3. Implémentation des opérations CRUD



Écrivons maintenant les gestionnaires principaux pour chaque méthode HTTP. Nous utiliserons le modèle de routage par URL :

  • GET /tasks — obtenir toutes les tâches
  • POST /tasks — créer une nouvelle tâche
  • GET /tasks/{id} — obtenir une tâche par son ID
  • PUT /tasks/{id} — mettre à jour une tâche
  • DELETE /tasks/{id} — supprimer une tâche


3.1. Obtenir toutes les tâches (GET /tasks)

func getTasks(w http.ResponseWriter, r *http.Request) {    mu.Lock()    defer mu.Unlock()

w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(tasks)}


3.2. Créer une tâche (POST /tasks)

func createTask(w http.ResponseWriter, r *http.Request) {    var newTask Task    if err := json.NewDecoder(r.Body).Decode(&newTask); err != nil {        http.Error(w, "Invalid JSON", http.StatusBadRequest)        return    }

mu.Lock() newTask.ID = nextID nextID++ tasks = append(tasks, newTask) mu.Unlock()

w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(newTask)}


3.3. Obtenir, mettre à jour et supprimer par ID

Pour ces opérations, nous devons extraire l'ID de l'URL. La bibliothèque standard de Go n'a pas d'analyseur de chemin intégré, nous allons donc écrire un petit utilitaire :



                

Blogs

Book Recommendations