Este artículo analiza un enfoque alternativo para obtener la respuesta HTTP con fines de registro sin recurrir a solicitudes falsas ni modificar http.ResponseWriter. Introducimos el concepto de encadenamiento de middleware, proporcionando una implementación de estilo funcional.
El encadenamiento de middleware implica pasar el control a una cadena de controladores que realizan tareas específicas antes y después de la ejecución de la solicitud principal. Estos controladores, conocidos como middleware, reciben la solicitud y el siguiente controlador de la cadena, lo que garantiza una ejecución ordenada.
Definimos una función de middleware personalizada que actúa como un combinador de controladores 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)
}
}
Para garantizar el registro de respuesta automático para todos los controladores en una categoría específica, creamos otro combinador de controladores que encapsula el middleware de registro:
func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}
Ahora, cualquier cadena de controlador creada con NewDefaultHandler incluirá automáticamente el registro de respuestas y otros comportamientos predeterminados.
h := NewDefaultHandler(...)
Utilizando el encadenamiento de middleware, podemos interceptar y registrar de forma transparente respuestas HTTP sin la necesidad de falsificar solicitudes o modificar http.ResponseWriter. Este enfoque permite el registro modular y simplifica la gestión de controladores.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3