Comment écrire une API REST en Go en 30 minutes : guide 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 : pourquoi Go est le choix idéal pour une API REST

Go (ou Golang) est un langage de programmation compilé de Google, qui combine les performances du C++ avec la simplicité de Python. Si vous souhaitez créer une API REST rapide, fiable et facile à maintenir, Go est l'un des meilleurs choix. Dans cet article, nous allons écrire en 30 minutes une API REST complète en Go, capable de créer, lire, mettre à jour et supprimer des enregistrements (CRUD). Pas de frameworks complexes — seulement la bibliothèque standard net/http et un peu de code.

À la fin de cet article, vous obtiendrez un serveur HTTP prêt à l'emploi qui répond aux requêtes au format JSON et fonctionne sans dépendances externes. C'est parti !



Étape 1 : Configuration du projet et structure

Pour commencer, assurez-vous d'avoir Go installé (version 1.16+). 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

La structure du projet sera simple — un seul fichier main.go. Nous y placerons tout le code pour ne pas compliquer l'exemple. Dans des projets réels, vous diviserez bien sûr le code en paquets, mais pour l'apprentissage, c'est l'idéal.



Étape 2 : Définir la structure de données et le stockage global

Notre API gérera une liste de livres. Créons une structure Book et une simple slice pour stocker les données en mémoire (au lieu d'une base de données).

package main

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

type Book struct { ID int `json:"id"` Title string `json:"title"` Author string `json:"author"` Year int `json:"year"`}

var books []Bookvar nextID int = 1

Ici, books est notre « couche de données » temporaire, et nextID est un compteur pour attribuer automatiquement un ID aux nouveaux livres.



Étape 3 : Implémenter les gestionnaires de requêtes HTTP (CRUD)

Maintenant, la partie la plus intéressante — écrivons les fonctions de gestion pour chaque méthode HTTP. Nous utiliserons le routeur standard http.NewServeMux.



3.1. Récupérer tous les livres (GET /books)

func getBooks(w http.ResponseWriter, r *http.Request) {    w.Header().Set("Content-Type", "application/json")    json.NewEncoder(w).Encode(books)}


3.2. Créer un nouveau livre (POST /books)

func createBook(w http.ResponseWriter, r *http.Request) {    var newBook Book    if err := json.NewDecoder(r.Body).Decode(&newBook); err != nil {        http.Error(w, "Invalid JSON", http.StatusBadRequest)        return    }    newBook.ID = nextID    nextID++    books = append(books, newBook)    w.Header().Set("Content-Type", "application/json")    w.WriteHeader(http.StatusCreated)    json.NewEncoder(w).Encode(newBook)}


3.3. Récupérer un livre par ID (GET /books/{id})

Dans le ServeMux standard, il n'y a pas de support pour les chemins dynamiques, donc nous allons extraire l'ID de l'URL manuellement.

func getBook(w http.ResponseWriter, r *http.Request) {    idStr := strings.TrimPrefix(r.URL.Path, "/books/")    id, err := strconv.Atoi(idStr)    if err != nil {        http.Error(w, "Invalid ID", http.StatusBadRequest)        return    }    for _, book := range books {        if book.ID == id {            w.Header().Set("Content-Type", "application/json")            json.NewEncoder(w).Encode(book)            return        }    }    http.Error(w, "Book not found", http.StatusNotFound)}


3.4. Mettre à jour un livre (PUT /books/{id})

func updateBook(w http.ResponseWriter, r *http.Request) {    idStr := strings.TrimPrefix(r.URL.Path, "/books/")    id, err := strconv.Atoi(idStr)    if err != nil {        http.Error(w, "Invalid ID", http.StatusBadRequest)        return    }    var updatedBook Book    if err := json.NewDecoder(r.Body).Decode(&updatedBook); err != nil {        h                

Blogs

Book Recommendations