Idea
User will be able to write their own limiter function. Here is example to limit 100 request per IP for 10s
reqIPLimiter := limiter.NewRequestLimitService(10*time.Second, 100, func(r *http.Request) string {
return r.RemoteAddr
})
http.HandleFunc("/resources", reqIPLimiter.Limit(resourcesHandler))
Another example is limit request by session id that stored in cookie:
reqSessionLimiter := limiter.NewRequestLimitService(10*time.Second, 100, func(r *http.Request) string {
return r.Cookie("Session-ID")
})
http.HandleFunc("/resources", reqIPLimiter.Limit(resourcesHandler))
The default behavior (limit all request) can be achieved this way:
reqIPLimiter := limiter.NewRequestLimitService(10*time.Second, 100, nil)
http.HandleFunc("/resources", reqIPLimiter.Limit(resourcesHandler))
And also user will be able to write their own response handler when current request is blocked
limiter.OnTooManyRequest(func(w http.ResponseWriter, r *http.Request) {
http.Error(w, "please try again later", http.StatusTooManyRequest)
})