Cet article traite d'une approche alternative pour obtenir la réponse HTTP à des fins de journalisation sans recourir à de fausses requêtes ou à modifier http.ResponseWriter. Nous introduisons le concept de chaînage de middleware, fournissant une implémentation de style fonctionnel.
Le chaînage de middleware implique de passer le contrôle à une chaîne de gestionnaires qui effectuent des tâches spécifiques avant et après l'exécution de la requête principale. Ces gestionnaires, appelés middleware, reçoivent la requête et le gestionnaire suivant dans la chaîne, garantissant une exécution ordonnée.
Nous définissons une fonction middleware personnalisée qui agit comme un combinateur de gestionnaire HTTP :
func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// Replace the response writer with a recorder for subsequent handlers
c := httptest.NewRecorder()
next(c, r)
// Copy data from the recorder to the original response writer
for k, v := range c.HeaderMap {
w.Header()[k] = v
}
w.WriteHeader(c.Code)
c.Body.WriteTo(w)
}
}
Pour garantir la journalisation automatique des réponses pour tous les gestionnaires d'une catégorie spécifique, nous créons un autre combinateur de gestionnaires qui encapsule le middleware de journalisation :
func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}
Désormais, toute chaîne de gestionnaires instanciée à l'aide de NewDefaultHandler inclura automatiquement la journalisation des réponses et d'autres comportements par défaut.
h := NewDefaultHandler(...)
Grâce au chaînage middleware, nous pouvons intercepter et enregistrer de manière transparente les réponses HTTP sans avoir besoin de falsifier la demande ou de modifier le http.ResponseWriter. Cette approche permet une journalisation modulaire et simplifie la gestion des gestionnaires.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3