API Gateway en Go : votre chef d'orchestre personnel pour l'orchestre microservices

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 votre projet Go a besoin d'un chef d'orchestre

\n\n

Imaginez un orchestre symphonique. Vous avez des violons (service utilisateurs), des cuivres (service commandes), des percussions (service paiements). Chaque instrument est magnifique en soi, mais sans chef d'orchestre, ils joueront chacun de leur côté. Dans le monde des microservices en Go, l'API Gateway est ce chef d'orchestre.

\n\n

Lorsque vous codez en Go, vous êtes habitué à la performance, la simplicité et l'élégance. Mais dès que le nombre de services dépasse 3 ou 4, le chaos s'installe : les clients ne savent pas où frapper, l'authentification est dupliquée dans chaque service, et la surveillance devient un casse-tête. L'API Gateway pour services Go résout tous ces problèmes d'un coup.

\n\n

Dans cet article, nous ne nous contenterons pas de parler théorie. Nous allons prendre Go, la bibliothèque standard et quelques paquets populaires pour construire notre propre passerelle. Prêt à diriger ? C'est parti !

\n\n

Qu'est-ce qu'une API Gateway et pourquoi en avez-vous besoin en Go ?

\n\n

L'API Gateway est un point d'entrée unique pour toutes les requêtes client vers vos services backend. Imaginez que vous ayez :

\n\n
    \n
  • user-service:8081 — inscription et profils
  • \n
  • order-service:8082 — panier et commandes
  • \n
  • payment-service:8083 — transactions
  • \n
\n\n

Sans passerelle, le client doit connaître les adresses des trois services. Avec l'API Gateway en Go, il ne frappe qu'à api.example.com, et la passerelle décide elle-même où diriger la requête.

\n\n

Fonctions principales de la passerelle

\n\n
    \n
  • Routage — redirection des requêtes vers le service approprié
  • \n
  • Authentification et autorisation — vérification des tokens JWT en un seul endroit
  • \n
  • Limitation de débit — protection contre les DDoS et les surcharges
  • \n
  • Agrégation de données — collecte des réponses de plusieurs services en une seule
  • \n
  • Équilibrage de charge — répartition des requêtes entre les instances
  • \n
\n\n

Go est idéal pour ce rôle : il est léger, rapide et permet de traiter des milliers de requêtes par seconde sur un seul cœur.

\n\n

Écrire une API Gateway simple en Go : de l'idée au code

\n\n

Construisons une API Gateway Go minimale mais fonctionnelle. Nous utiliserons uniquement la bibliothèque standard net/http et le paquet httputil.ReverseProxy pour le proxy.

\n\n

Étape 1 : Routage de base

\n\n

Commençons simplement : dirigeons les requêtes vers différents services en fonction du chemin.

\n\n
package main\n\nimport (\n    "log"\n    "net/http"\n    "net/http/httputil"\n    "net/url"\n)\n\nfunc main() {\n    // Service utilisateurs\n    userServiceURL, _ := url.Parse("http://localhost:8081")\n    userProxy := httputil.NewSingleHostReverseProxy(userServiceURL)\n\n    // Service commandes\n    orderServiceURL, _ := url.Parse("http://localhost:8082")\n    orderProxy := httputil.NewSingleHostReverseProxy(orderServiceURL)\n\n    http.HandleFunc("/api/users/", func(w http.ResponseWriter, r *http.Request) {\n        log.Printf("Redirection de la requête vers user-service : %s", r.URL.Path)\n        userProxy.ServeHTTP(w, r)\n    })\n\n    http.HandleFunc("/api/orders/", func(w http.ResponseWriter, r *http.Request) {\n        log.Printf("Redirection de la requête vers order-service : %s", r.URL.Path)\n        orderProxy.ServeHTTP(w, r)\n    })\n\n    log.Println("API Gateway démarrée sur :8080")\n    log.Fatal(http.ListenAndServe(":8080", nil))\n}\n
\n\n

Ce code fait déjà 80 % du travail : toute requête vers /api/users/ part vers user-service, et vers /api/orders/ vers order-service. Mais où est l'authentification ?

\n\n

Étape 2 : Ajout d'un middleware pour JWT

\n\n

La véritable magie de l'API Gateway en Go se produit dans le middleware. Ajoutons une vérification du token JWT avant le proxy.

\n\n
package main\n\nimport (\n    "context"\n    "log"\n    "net/http"\n    "net/http/htt                

Blogs

Book Recommendations