Назад к вопросам
Junior — Middle
74
Какими способами можно контролировать число вызовов конкретного API-метода?
Компании, где спрашивали
GsmSoft
Ответ от нейросети
sobes.tech AI
Контроль числа вызовов API-метода можно реализовать следующими способами:
-
Rate Limiting (ограничение частоты вызовов) — ограничение количества запросов за определённый промежуток времени. Например, с помощью токен-бакета или счётчика запросов.
-
Использование middleware или interceptor'ов — для подсчёта и контроля вызовов перед выполнением метода.
-
Кэширование результатов — чтобы уменьшить количество вызовов к API при повторных запросах с одинаковыми параметрами.
-
Аутентификация и авторизация — ограничение доступа к API для определённых пользователей или приложений.
Пример простого rate limiting на Go с использованием счётчика и таймера:
package main
import (
"net/http"
"sync"
"time"
)
var (
mu sync.Mutex
reqCount int
limit = 10 // максимум 10 запросов
)
func rateLimitedHandler(w http.ResponseWriter, r *http.Request) {
mu.Lock()
if reqCount >= limit {
mu.Unlock()
http.Error(w, "Rate limit exceeded", http.StatusTooManyRequests)
return
}
reqCount++
mu.Unlock()
// Обработка запроса
w.Write([]byte("API response"))
}
func resetCounter() {
for {
time.Sleep(time.Minute)
mu.Lock()
reqCount = 0
mu.Unlock()
}
}
func main() {
go resetCounter()
http.HandleFunc("/api", rateLimitedHandler)
http.ListenAndServe(":8080", nil)
}
Этот пример ограничивает число вызовов до 10 в минуту.