Introduction : pourquoi Go est-il idéal pour les API REST ?
Go (Golang) est un langage de programmation compilé moderne, créé chez Google. Il combine les hautes performances du C++ et la simplicité de Python. Si vous avez besoin d'écrire rapidement une API REST, Go est l'un des meilleurs choix. Dans cet article, nous allons créer une API REST complète en Go en 30 minutes, en utilisant uniquement la bibliothèque standard net/http. Vous verrez à quel point il est simple de traiter les requêtes HTTP, de les router et de renvoyer des réponses JSON.
À la fin de cet article, vous serez capable d'écrire votre propre API, qui pourra être déployée sur un serveur. Nous n'utiliserons pas de frameworks tiers – seulement du Go pur, ce qui rend le code léger et rapide.
Étape 1 : Installation de Go et création du projet
Installation de Go
Si vous n'avez pas encore installé Go, téléchargez la dernière version depuis le site officiel. Suivez les instructions pour votre système d'exploitation. Après l'installation, vérifiez la version dans le terminal :
go versionVous devriez voir quelque chose comme go version go1.22.0 linux/amd64.
Création du projet
Créez un nouveau répertoire pour le projet et initialisez le module Go :
mkdir go-rest-apicd go-rest-apigo mod init go-rest-apiLa structure du projet est maintenant prête. Nous écrirons tout le code dans un seul fichier main.go, pour ne pas compliquer l'exemple.
Étape 2 : Un serveur HTTP simple en Go
Commençons par un serveur HTTP de base. Ouvrez le fichier main.go et ajoutez le code suivant :
package main
import ( "fmt" "log" "net/http")
func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, REST API on Go!") })
log.Println("Serveur démarré sur le port 8080") log.Fatal(http.ListenAndServe(":8080", nil))}Lancez le serveur avec la commande go run main.go et ouvrez votre navigateur à l'adresse http://localhost:8080. Vous verrez un message de bienvenue. Félicitations – votre premier serveur HTTP en Go fonctionne !
Analyse du code
http.HandleFunc– enregistre un gestionnaire pour la route "/".http.ListenAndServe– démarre le serveur sur le port 8080.log.Fatal– affiche une erreur si le serveur ne démarre pas.
Étape 3 : Ajout du routage et du traitement JSON
Ajoutons maintenant la prise en charge du style REST : GET, POST, PUT, DELETE. Nous allons créer une simple "base de données" en mémoire (une slice de structures) et gérer une liste de tâches (todo list).
Structure de données
Ajoutez dans main.go la description de la structure Task et une slice globale :
type Task struct { ID int `json:"id"` Name string `json:"name"`}
var tasks []Taskvar nextID int = 1Gestionnaires de routes
Créons un gestionnaire principal qui analysera la méthode HTTP et appellera la fonction appropriée :
func tasksHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: getTasks(w, r) case http.MethodPost: createTask(w, r) default: http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) }}
func taskHandler(w http.ResponseWriter, r *http.Request) { // Extrait l'ID de l'URL idStr := strings.TrimPrefix(r.URL.Path, "/tasks/") id, err := strconv.Atoi(idStr) if err != nil { http.Error(w, "Invalid task ID", http.StatusBadRequest) return }
switch r.Method { case http.MethodGet: getTask(w, r, id) case http.MethodPut: updateTask(w, r, id) case http.MethodDelete: deleteTask(w, r, id) default: http.Error(w, "Method not allowed", http.StatusMethodNot