"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como registrar respostas HTTP sem modificar o http.ResponseWriter?

Como registrar respostas HTTP sem modificar o http.ResponseWriter?

Publicado em 2024-11-09
Navegar:348

How to Log HTTP Responses Without Modifying http.ResponseWriter?

Registrando resposta HTTP em http.HandleFunc

Este artigo discute uma abordagem alternativa para obter a resposta HTTP para fins de registro sem recorrer a solicitações falsas ou modificar http.ResponseWriter. Introduzimos o conceito de encadeamento de middleware, fornecendo uma implementação de estilo funcional.

Encadeamento de middleware

O encadeamento de middleware envolve passar o controle para uma cadeia de manipuladores que executam tarefas específicas antes e depois da execução da solicitação principal. Esses manipuladores, conhecidos como middleware, recebem a solicitação e o próximo manipulador na cadeia, garantindo a execução ordenada.

Definimos uma função de middleware personalizada que atua como um combinador de manipulador 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)
    }
}

Aplicando a solução

Para garantir o registro de resposta automático para todos os manipuladores em uma categoria específica, criamos outro combinador de manipulador que encapsula o middleware de registro:

func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
    return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}

Agora, qualquer cadeia de manipuladores instanciada usando NewDefaultHandler incluirá automaticamente o registro de respostas e outros comportamentos padrão.

h := NewDefaultHandler(...)

Conclusão

Usando o encadeamento de middleware, podemos interceptar e registrar respostas HTTP de forma transparente, sem a necessidade de falsificação de solicitação ou modificação do http.ResponseWriter. Essa abordagem permite o registro modular e simplifica o gerenciamento do manipulador.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3