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