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.
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
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 :
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.