Go Academy · Leçon

Fondamentaux de la chaîne d’intergiciels HTTP

Envelopper http.Handler et chaîner avec next

Leçon 1 sur 413 étapes

Fondamentaux de la chaîne d’intergiciels HTTP est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.

Intergiciels dans net/http

Dans la bibliothèque standard de Go, un intergiciel est une fonction qui accepte un http.Handler et renvoie un nouvel http.Handler enveloppant le premier avec un comportement supplémentaire.

type Middleware func(http.Handler) http.Handler

Intergiciel de base

Le HandlerFunc interne enveloppe le gestionnaire d’origine avec une logique préalable et postérieure :

func Logger(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Printf("→ %s %s", r.Method, r.URL.Path)
        next.ServeHTTP(w, r)
        log.Printf("← %s %s done", r.Method, r.URL.Path)
    })
}

Appliquer un intergiciel

Enveloppez les gestionnaires avant de les enregistrer auprès du multiplexeur :

mux := http.NewServeMux()
mux.Handle("/api/", Logger(Auth(apiHandler)))
http.ListenAndServe(":8080", mux)

Assistant de chaîne d’intergiciels

Une fonction de chaîne applique plusieurs intergiciels dans un ordre lisible, de gauche à droite :

func Chain(h http.Handler, ms ...func(http.Handler) http.Handler) http.Handler {
    for i := len(ms)-1; i >= 0; i-- { h = ms[i](h) }
    return h
}
// Usage: Chain(handler, Logger, Auth, RateLimit)

Contexte dans un intergiciel

Ajoutez des valeurs limitées à la requête en créant un contexte dérivé et en enveloppant la requête :

func RequestID(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        id := uuid.New().String()
        ctx := context.WithValue(r.Context(), reqIDKey, id)
        w.Header().Set("X-Request-ID", id)
        next.ServeHTTP(w, r.WithContext(ctx))
    })
}

Enveloppe du générateur de réponse

Capturez le code d’état écrit par un gestionnaire en enveloppant le ResponseWriter :

type captureWriter struct {
    http.ResponseWriter
    status int
}
func (cw *captureWriter) WriteHeader(code int) {
    cw.status = code
    cw.ResponseWriter.WriteHeader(code)
}

Intergiciel de récupération après panique

Récupérez-vous des paniques pour empêcher le serveur de se bloquer :

func Recovery(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        defer func() {
            if rec := recover(); rec != nil {
                http.Error(w, "Internal Server Error", 500)
            }
        }()
        next.ServeHTTP(w, r)
    })
}

L’ordre est important

Les intergiciels s’exécutent dans l’ordre où ils enveloppent le gestionnaire. Recovery doit être le plus extérieur (il enveloppe tout). Auth doit précéder la logique métier. La journalisation est généralement la plus extérieure après Recovery.

Compatibilité avec les routeurs tiers

Comme l’intergiciel suit la signature standard func(http.Handler) http.Handler, il est compatible avec chi, gorilla/mux et tout routeur qui accepte http.Handler.

Global ou spécifique à une route

Appliquez un intergiciel à l’ensemble du multiplexeur ou enveloppez des gestionnaires individuels pour un comportement propre à chaque route. Les sous-routeurs de chi facilitent l’application d’intergiciels au niveau des groupes.

Tester les intergiciels

Utilisez httptest.NewRecorder et httptest.NewRequest pour tester les intergiciels de manière isolée, sans démarrer de véritable serveur.

w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/", nil)
Logger(http.HandlerFunc(noop)).ServeHTTP(w, r)

Vérification rapide

Quelle est la signature standard d’un intergiciel net/http ?

Récapitulatif : chaîne d’intergiciels

Points clés :

  • func(http.Handler) http.Handler est la signature standard
  • Utilisez un assistant Chain pour éviter les imbrications profondes
  • r.WithContext(ctx) permet d’ajouter des valeurs ; une enveloppe du générateur capture le code d’état
  • Recovery doit être le plus extérieur ; Auth doit précéder la logique métier ; la journalisation vient après Recovery
Gratuit pour commencer

Apprends Go avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
51
Leçons
203

Questions Fréquemment Posées

La leçon « Fondamentaux de la chaîne d’intergiciels HTTP » est-elle gratuite ?

Oui — le texte complet de « Fondamentaux de la chaîne d’intergiciels HTTP » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Fondamentaux de la chaîne d’intergiciels HTTP » ?

Envelopper http.Handler et chaîner avec next Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Go Academy ?

Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Fondamentaux de la chaîne d’intergiciels HTTP » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?

Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Fondamentaux de la chaîne d’intergiciels HTTP
  2. Intergiciel de journalisation et d’identifiant de requête
  3. Intergiciel d’authentification et de limitation du débit
  4. Intergiciel CORS et récupération après panic
← Retour à Go Academy