В этой статье обсуждается альтернативный подход к получению HTTP-ответа для целей регистрации, не прибегая к подделке запросов или изменению http.ResponseWriter. Мы представляем концепцию цепочки промежуточного программного обеспечения, обеспечивающую реализацию функционального стиля.
Цепочка промежуточного программного обеспечения предполагает передачу управления цепочке обработчиков, которые выполняют определенные задачи до и после выполнения основного запроса. Эти обработчики, называемые промежуточным программным обеспечением, получают запрос и следующий обработчик в цепочке, обеспечивая упорядоченное выполнение.
Мы определяем специальную функцию промежуточного программного обеспечения, которая действует как комбинатор обработчиков 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)
}
}
Чтобы обеспечить автоматическую регистрацию ответов для всех обработчиков в определенной категории, мы создаем еще один комбинатор обработчиков, который инкапсулирует промежуточное программное обеспечение для ведения журнала:
func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}
Теперь любая цепочка обработчиков, созданная с помощью NewDefaultHandler, будет автоматически включать регистрацию ответов и другие варианты поведения по умолчанию.
h := NewDefaultHandler(...)
Используя цепочку промежуточного программного обеспечения, мы можем прозрачно перехватывать и регистрировать HTTP-ответы без необходимости подделки запросов или изменение http.ResponseWriter. Такой подход позволяет вести модульное журналирование и упрощает управление обработчиками.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3