"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo registrar respuestas HTTP sin modificar http.ResponseWriter?

¿Cómo registrar respuestas HTTP sin modificar http.ResponseWriter?

Publicado el 2024-11-09
Navegar:133

How to Log HTTP Responses Without Modifying http.ResponseWriter?

Registro de respuesta HTTP en http.HandleFunc

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.

Encadenamiento de middleware

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)
    }
}

Aplicación de la solución

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(...)

Conclusión

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.

Último tutorial Más>

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