Ответ
Для ограничения количества вызовов API можно использовать rate limiting. В Go это легко реализовать с помощью пакета golang.org/x/time/rate или middleware в веб-фреймворках (например, Gin, Echo).
Пример с golang.org/x/time/rate:
import (
"net/http"
"golang.org/x/time/rate"
)
var limiter = rate.NewLimiter(1, 5) // 1 запрос в секунду, максимум 5 в "пачке"
func limitMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
next.ServeHTTP(w, r)
})
}
Для более сложных сценариев (например, ограничение по IP или ключу API) можно использовать хранилище (Redis) для подсчета запросов.