Modello middleware
Concatenare gli handler per logging e autenticazione
Modello middleware è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Che cos'è il middleware?
Il middleware è una funzione che avvolge un http.Handler per aggiungere funzionalità trasversali (logging, autenticazione, recovery) senza modificare la logica di business del gestore.
Firma del middleware
Un middleware è una funzione che accetta un http.Handler e restituisce un http.Handler:
type Middleware func(http.Handler) http.HandlerMiddleware per il logging semplice
Registri ogni richiesta prima e dopo l'esecuzione del gestore:
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)
})
}Concatenazione dei middleware
Applichi più livelli di middleware annidandoli:
handler := Logger(Auth(RateLimit(myHandler)))
http.ListenAndServe(":8080", handler)Helper per la catena di middleware
Crei una funzione per la catena che applichi i middleware nell'ordine, senza un annidamento eccessivo:
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)Middleware di autenticazione
Controlli l'autenticazione prima di chiamare il gestore successivo. Restituisca subito 401 se il token è mancante o non valido.
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)
})
}Middleware per il recupero dai panic
Intercetti i panic dei gestori affinché il server non vada in crash:
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)
})
}Passare dati tramite il contesto
Il middleware può associare dati al contesto della richiesta per renderli disponibili ai gestori successivi:
ctx := context.WithValue(r.Context(), userKey, user)
next.ServeHTTP(w, r.WithContext(ctx))Wrapper della risposta
Acquisisca il codice di stato scritto dal gestore avvolgendo ResponseWriter:
type statusRecorder struct {
http.ResponseWriter
status int
}
func (r *statusRecorder) WriteHeader(code int) {
r.status = code
r.ResponseWriter.WriteHeader(code)
}L'ordine è importante
Il middleware viene eseguito nell'ordine in cui avvolge il gestore. L'autenticazione deve essere eseguita prima del rate limiting; il recupero dai panic deve essere più esterno, così intercetta i panic degli altri middleware.
Middleware per route e globale
Applichi il middleware globale, come logging e recovery, all'intero mux. Applichi il middleware specifico per una route, come autenticazione e rate limiting, a gruppi di route specifici usando un subrouter o un wrapper del gestore.
Verifica rapida
Qual è la firma corretta di un middleware HTTP in Go?
Riepilogo: pattern middleware
Punti chiave:
- Middleware: func(http.Handler) http.Handler
- Annidare i middleware; utilizzare un helper Chain per maggiore chiarezza
- Recovery all'esterno; autenticazione prima della logica di business
- Passare i dati ai gestori successivi tramite il contesto
Domande Frequenti
La lezione «Modello middleware» è gratuita?
Sì — il testo completo di «Modello middleware» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Modello middleware»?
Concatenare gli handler per logging e autenticazione Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Modello middleware»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Creare un server HTTP
- Routing e parametri del percorso
- Modello middleware
- Arresto graduale