«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как регистрировать HTTP-ответы без изменения http.ResponseWriter?

Как регистрировать HTTP-ответы без изменения http.ResponseWriter?

Опубликовано 9 ноября 2024 г.
Просматривать:682

How to Log HTTP Responses Without Modifying http.ResponseWriter?

Регистрация HTTP-ответа в http.HandleFunc

В этой статье обсуждается альтернативный подход к получению 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