Introduction : pourquoi Go est le choix idéal pour une API REST
Go (Golang) est un langage de programmation compilé, créé chez Google pour les systèmes à forte charge. Il combine la vitesse du C, la simplicité de Python et le support intégré de la concurrence. Pour créer une API REST, Go propose une bibliothèque standard puissante net/http et des frameworks populaires comme gorilla/mux et gin.
Dans ce guide, nous allons créer en 30 minutes une API REST complète pour gérer une liste de tâches (Todo List) en Go pur, sans frameworks tiers. Vous apprendrez à :
- Configurer le routage et les gestionnaires
- Travailler avec JSON (sérialisation/désérialisation)
- Implémenter les opérations CRUD (Create, Read, Update, Delete)
- Ajouter un middleware pour la journalisation et CORS
Tout le code sera écrit dans un seul fichier main.go pour simplifier. Commençons !
Étape 1 : Structure de base et démarrage du serveur HTTP
Créez un fichier main.go et ajoutez le code suivant. Nous allons déclarer une structure de données pour la tâche et démarrer un serveur simple.
package main
import ( "encoding/json" "log" "net/http" "strconv" "strings" "sync" "time")
// Task — structure de la tâchetype Task struct { ID int `json:"id"` Title string `json:"title"` Completed bool `json:"completed"` CreatedAt time.Time `json:"created_at"`}
// Stockage des tâches (in-memory)var ( tasks = make(map[int]Task) nextID = 1 mu sync.Mutex)
func main() { // Routes http.HandleFunc("/api/tasks", tasksHandler) http.HandleFunc("/api/tasks/", taskByIDHandler)
log.Println("Serveur démarré sur :8080") log.Fatal(http.ListenAndServe(":8080", nil))}Explication :
Task— structure avec des tags JSON pour une sérialisation correcte.tasks— map pour stocker les tâches en mémoire (sans base de données).mu— mutex pour un accès sécurisé depuis les goroutines.- Deux routes :
/api/tasks(liste et création) et/api/tasks/(travail sur une tâche par ID).
Étape 2 : Gestionnaires pour la liste des tâches (GET et POST)
Implémentons la fonction tasksHandler qui gère GET (récupération de toutes les tâches) et POST (création d'une nouvelle tâche).
func tasksHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json")
switch r.Method { case http.MethodGet: mu.Lock() taskList := make([]Task, 0, len(tasks)) for _, task := range tasks { taskList = append(taskList, task) } mu.Unlock() json.NewEncoder(w).Encode(taskList)
case http.MethodPost: var newTask Task if err := json.NewDecoder(r.Body).Decode(&newTask); err != nil { http.Error(w, `{"error":"JSON invalide"}`, http.StatusBadRequest) return } mu.Lock() newTask.ID = nextID nextID++ newTask.CreatedAt = time.Now() tasks[newTask.ID] = newTask mu.Unlock()
w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(newTask)
default: http.Error(w, `{"error":"Méthode non supportée"}`, http.StatusMethodNotAllowed) }}Points clés :
- Nous utilisons
json.NewEncoderetjson.NewDecoderpour travailler avec JSON. - Pour POST, nous vérifions la validité du JSON, attribuons un ID et retournons 201 Created.
- Le mutex protège les données lors d'un accès concurrent.
Étape 3 : Gestionnaires pour une tâche individuelle (GET, PUT, DELETE)
Implémentons maintenant taskByIDHandler. Nous extrayons l'ID de l'URL à l'aide de strings.TrimPrefix
Blogs
Book Recommendations
Lire aussi
Top erreurs des développeurs C# débutants : niveau avancé
Canonical vs Simple vs Class Name en Java : Analyse complète
API en Go : REST, GraphQL et gRPC — que choisir en 2025
Meilleurs IDE et outils pour le développement JavaScript en 2025
Comment devenir développeur Kotlin : conseils et CV pour débutants