Modèle des intergiciels
Chaîner des gestionnaires pour la journalisation et l’authentification
Modèle des intergiciels est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.
Qu’est-ce qu’un intergiciel ?
Un intergiciel est une fonction qui entoure un http.Handler pour ajouter un comportement transversal (journalisation, authentification, récupération) sans modifier la logique métier du gestionnaire.
Signature d’un intergiciel
Un intergiciel est une fonction qui reçoit un http.Handler et renvoie un http.Handler :
type Middleware func(http.Handler) http.HandlerIntergiciel de journalisation simple
Journalisez chaque requête avant et après l’exécution du gestionnaire :
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("done %s", r.URL.Path)
})
}Chaînage des intergiciels
Appliquez plusieurs couches d’intergiciels en les imbriquant :
handler := Logger(Auth(RateLimit(myHandler)))
http.ListenAndServe(":8080", handler)Fonction auxiliaire pour chaîner les intergiciels
Créez une fonction de chaîne pour appliquer les intergiciels dans l’ordre sans imbrication profonde :
func Chain(h http.Handler, m ...Middleware) http.Handler {
for i := len(m)-1; i >= 0; i-- {
h = m[i](h)
}
return h
}
// Usage: Chain(myHandler, Logger, Auth, RateLimit)Intergiciel d’authentification
Vérifiez l’authentification avant d’appeler le gestionnaire suivant. Retournez immédiatement 401 si le jeton est absent ou invalide.
func Auth(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
token := r.Header.Get("Authorization")
if !isValid(token) {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
next.ServeHTTP(w, r)
})
}Intergiciel de récupération après panique
Interceptez les paniques des gestionnaires afin d’éviter l’arrêt du serveur :
func Recovery(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
if err := recover(); err != nil {
log.Printf("panic: %v", err)
http.Error(w, "Internal Server Error", 500)
}
}()
next.ServeHTTP(w, r)
})
}Transmettre des données via le contexte
Un intergiciel peut associer des données au contexte de la requête afin que les gestionnaires en aval puissent y accéder :
ctx := context.WithValue(r.Context(), userKey, user)
next.ServeHTTP(w, r.WithContext(ctx))Enveloppe de réponse
Capturez le code d’état écrit par le gestionnaire en enveloppant ResponseWriter :
type statusRecorder struct {
http.ResponseWriter
status int
}
func (r *statusRecorder) WriteHeader(code int) {
r.status = code
r.ResponseWriter.WriteHeader(code)
}L’ordre est important
Les intergiciels s’exécutent dans l’ordre où ils entourent le gestionnaire. L’authentification doit s’exécuter avant la limitation du débit ; la récupération après panique doit être la couche la plus externe afin d’intercepter les paniques des autres intergiciels.
Intergiciel par route ou global
Appliquez les intergiciels globaux (journalisation, récupération) à l’ensemble du mux. Appliquez les intergiciels propres à une route (authentification, limitation du débit) à des groupes de routes spécifiques à l’aide d’un sous-routeur ou d’une enveloppe de gestionnaire.
Vérification rapide
Quelle est la signature correcte d’un intergiciel HTTP en Go ?
Récapitulatif : modèle des intergiciels
Points clés :
- Intergiciel : func(http.Handler) http.Handler
- Chaînez-les par imbrication ; utilisez une fonction Chain pour plus de clarté
- Récupération à l’extérieur ; Auth avant la logique métier
- Transmettez les données en aval via le contexte
Questions Fréquemment Posées
La leçon « Modèle des intergiciels » est-elle gratuite ?
Oui — le texte complet de « Modèle des intergiciels » 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 « Modèle des intergiciels » ?
Chaîner des gestionnaires pour la journalisation et l’authentification 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 3 sur 4.
Combien de temps prend la leçon « Modèle des intergiciels » ?
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
- Créer un serveur HTTP
- Routage et paramètres de chemin
- Modèle des intergiciels
- Arrêt progressif