Backend

Construire sa première API REST en Go

Go est rapide, simple et lisible. Le langage parfait pour comprendre ce qu'est vraiment un serveur.

Construire sa première API REST en Go

Go est souvent présenté comme un langage "difficile d'accès" pour les développeurs web habitués à JS ou Python. C'est faux. Go est l'un des langages les plus lisibles qui existe — sa bibliothèque standard couvre 90% des besoins d'une API sans dépendances tierces.

Un serveur HTTP en 10 lignes

main.go
package main
 
import (
  "encoding/json"
  "net/http"
)
 
func main() {
  http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
    json.NewEncoder(w).Encode(map[string]string{"status": "ok"})
  })
  http.ListenAndServe(":8080", nil)
}

C'est tout. Pas de framework, pas de configuration. Un binaire statique de quelques mégaoctets, facilement conteneurisé avec Docker.

La structure d'une vraie API

Pour un projet réel, j'organise les fichiers ainsi :

api/
├── main.go          — point d'entrée
├── handlers/        — logique HTTP
│   └── articles.go
├── models/          — types de données
│   └── article.go
└── db/              — accès base de données
    └── postgres.go

La couche db/ communique directement avec PostgreSQL — pas d'ORM, juste du SQL.

Gestion des erreurs explicite

Ce qui surprend en Go : les erreurs sont des valeurs, pas des exceptions. Tu les traites à chaque appel :

handlers/articles.go
func GetArticle(w http.ResponseWriter, r *http.Request) {
  id := r.PathValue("id")
 
  article, err := db.FindArticle(id)
  if err != nil {
    http.Error(w, "article introuvable", http.StatusNotFound)
    return
  }
 
  json.NewEncoder(w).Encode(article)
}

Ce n'est pas verbeux, c'est honnête. Tu sais exactement ce qui peut échouer et où.

Go force à écrire du code robuste. Au début ça surprend, au bout d'une semaine tu ne veux plus revenir en arrière.

Écrit par William Loree