GoDasturchi
Project: HTTP Middleware Rate Limiter

Project: HTTP Middleware Rate Limiter

Loyiha: HTTP middleware rate limiter

Endi barcha qismlar tayyor: har-klient token savatlari (Per-Key Rate Limiting), concurrent xavfsizlik (Concurrent-Safe Rate Limiter). Yakuniy qadam — buni haqiqiy backendlarda ishlatiladigan naqshga, middlewarega o'rash: so'rovni haqiqiy handler'ga yetkazishdan oldin uni tekshiradigan "o'rovchi" funksiya.

example.go
type Handler func(clientID string) string

func RateLimitMiddleware(limiter *Limiter, next Handler) Handler {
    return func(clientID string) string {
        if !limiter.Allow(clientID) {
            return "429 Too Many Requests"
        }
        return next(clientID)
    }
}

Bu — Pointers & Memory kursidagi funksiyani qiymat sifatida uzatish g'oyasining eng yuqori darajadagi qo'llanilishi: RateLimitMiddleware bir Handlerni oladi va yangi Handler qaytaradi — asl handler o'zi rate limiting haqida bilishi shart emas. Bu naqsh ("funksiya oladi, funksiya qaytaradi") haqiqiy Go veb-freymvorklarida (masalan, net/http middleware'lari) aynan shu tarzda ishlaydi, faqat Handler turi odatda http.Handler bo'ladi.

>_ Exercise

Berilgan Limiter (Per-Key Rate Limiting darsidagidek) yordamida Handler funksiya turini (func(clientID string) string) aniqlang. RateLimitMiddleware(limiter *Limiter, next Handler) Handler funksiyasini yozing — u yangi Handler qaytaradi: agar limiter.Allow(clientID) false bo'lsa, "429 Too Many Requests" qaytaradi; aks holda next(clientID)ni chaqirib, uning natijasini qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

Middleware naqshi — funksiyani qabul qilib, uni o'rab turgan yangi funksiyani qaytarish — Go backend dasturlashning eng keng tarqalgan naqshlaridan biri. Rate limiter shu tufayli har qanday handler atrofiga, uning ichki mantig'ini o'zgartirmasdan qo'shilishi mumkin bo'lgan mustaqil, qayta ishlatiladigan qatlamga aylandi.

Finish
OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Project: HTTP Middleware Rate Limiter

Loyiha: HTTP middleware rate limiter

Endi barcha qismlar tayyor: har-klient token savatlari (Per-Key Rate Limiting), concurrent xavfsizlik (Concurrent-Safe Rate Limiter). Yakuniy qadam — buni haqiqiy backendlarda ishlatiladigan naqshga, middlewarega o'rash: so'rovni haqiqiy handler'ga yetkazishdan oldin uni tekshiradigan "o'rovchi" funksiya.

example.go
type Handler func(clientID string) string

func RateLimitMiddleware(limiter *Limiter, next Handler) Handler {
    return func(clientID string) string {
        if !limiter.Allow(clientID) {
            return "429 Too Many Requests"
        }
        return next(clientID)
    }
}

Bu — Pointers & Memory kursidagi funksiyani qiymat sifatida uzatish g'oyasining eng yuqori darajadagi qo'llanilishi: RateLimitMiddleware bir Handlerni oladi va yangi Handler qaytaradi — asl handler o'zi rate limiting haqida bilishi shart emas. Bu naqsh ("funksiya oladi, funksiya qaytaradi") haqiqiy Go veb-freymvorklarida (masalan, net/http middleware'lari) aynan shu tarzda ishlaydi, faqat Handler turi odatda http.Handler bo'ladi.

>_ Exercise

Berilgan Limiter (Per-Key Rate Limiting darsidagidek) yordamida Handler funksiya turini (func(clientID string) string) aniqlang. RateLimitMiddleware(limiter *Limiter, next Handler) Handler funksiyasini yozing — u yangi Handler qaytaradi: agar limiter.Allow(clientID) false bo'lsa, "429 Too Many Requests" qaytaradi; aks holda next(clientID)ni chaqirib, uning natijasini qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

Middleware naqshi — funksiyani qabul qilib, uni o'rab turgan yangi funksiyani qaytarish — Go backend dasturlashning eng keng tarqalgan naqshlaridan biri. Rate limiter shu tufayli har qanday handler atrofiga, uning ichki mantig'ini o'zgartirmasdan qo'shilishi mumkin bo'lgan mustaqil, qayta ishlatiladigan qatlamga aylandi.