GoDasturchi
HTTP Middleware Pattern

HTTP Middleware Pattern

HTTP middleware naqshi

Ko'pincha bir xil mantiqni (logging, autentifikatsiya, vaqtni o'lchash) ko'plab handler'larga qo'llash kerak bo'ladi, kodni nusxalamasdan. Yechim — middleware: bitta handler'ni oladi va uni o'rab, qo'shimcha xatti-harakat bilan yangi handler qaytaradigan funksiya.

example.go
func LoggingMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        fmt.Printf("LOG: %s %s\n", r.Method, r.URL.Path)
        next.ServeHTTP(w, r)
    })
}

http.HandlerFunc — oddiy funksiyani http.Handler interfeysiga aylantiradigan moslashtiruvchi (adapter) tur: bu Interfaces & Polymorphism kursidagi "funksiya turlari ham metodlarga ega bo'lishi mumkin" g'oyasining amaliy qo'llanilishi. LoggingMiddleware(handler) chaqirilganda, u so'rovni avval o'zi "ushlab qoladi" (log yozadi), so'ngra next.ServeHTTP(w, r) bilan asl handler'ga uzatadi — bu Project: Rate Limiter kursidagi RateLimitMiddlewarening aynan bir xil naqshi.

>_ Exercise

LoggingMiddleware(next http.Handler) http.Handler funksiyasini yozing. U har bir so'rov uchun "LOG: <metod> <yo'l>" qatorini (standart chiqishga, fmt.Printf bilan) chop etadi, so'ngra so'rovni nextga uzatadi. mainda oddiy "hello" yozadigan handler'ni shu middleware bilan o'rab, sinab ko'ring.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Middleware naqshi — http.Handler qabul qilib, uni qo'shimcha xatti-harakat bilan o'ragan yangi http.Handler qaytarish. http.HandlerFunc oddiy funksiyani http.Handlerga aylantiradigan standart moslashtiruvchi.

NEXT UP

Panic Recovery and Middleware Chains

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

HTTP Middleware Pattern

HTTP middleware naqshi

Ko'pincha bir xil mantiqni (logging, autentifikatsiya, vaqtni o'lchash) ko'plab handler'larga qo'llash kerak bo'ladi, kodni nusxalamasdan. Yechim — middleware: bitta handler'ni oladi va uni o'rab, qo'shimcha xatti-harakat bilan yangi handler qaytaradigan funksiya.

example.go
func LoggingMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        fmt.Printf("LOG: %s %s\n", r.Method, r.URL.Path)
        next.ServeHTTP(w, r)
    })
}

http.HandlerFunc — oddiy funksiyani http.Handler interfeysiga aylantiradigan moslashtiruvchi (adapter) tur: bu Interfaces & Polymorphism kursidagi "funksiya turlari ham metodlarga ega bo'lishi mumkin" g'oyasining amaliy qo'llanilishi. LoggingMiddleware(handler) chaqirilganda, u so'rovni avval o'zi "ushlab qoladi" (log yozadi), so'ngra next.ServeHTTP(w, r) bilan asl handler'ga uzatadi — bu Project: Rate Limiter kursidagi RateLimitMiddlewarening aynan bir xil naqshi.

>_ Exercise

LoggingMiddleware(next http.Handler) http.Handler funksiyasini yozing. U har bir so'rov uchun "LOG: <metod> <yo'l>" qatorini (standart chiqishga, fmt.Printf bilan) chop etadi, so'ngra so'rovni nextga uzatadi. mainda oddiy "hello" yozadigan handler'ni shu middleware bilan o'rab, sinab ko'ring.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Middleware naqshi — http.Handler qabul qilib, uni qo'shimcha xatti-harakat bilan o'ragan yangi http.Handler qaytarish. http.HandlerFunc oddiy funksiyani http.Handlerga aylantiradigan standart moslashtiruvchi.

NEXT UP

Panic Recovery and Middleware Chains