Fondamentaux de la chaîne d’intergiciels HTTP
Envelopper http.Handler et chaîner avec next
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.HandlerIntergiciel 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
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
- Fondamentaux de la chaîne d’intergiciels HTTP
- Intergiciel de journalisation et d’identifiant de requête
- Intergiciel d’authentification et de limitation du débit
- Intergiciel CORS et récupération après panic