Sobes.tech
Назад к вопросам
Junior — Middle
74

Какими способами можно контролировать число вызовов конкретного API-метода?

Компании, где спрашивали
GsmSoft

Ответ от нейросети

sobes.tech AI

Контроль числа вызовов API-метода можно реализовать следующими способами:

  1. Rate Limiting (ограничение частоты вызовов) — ограничение количества запросов за определённый промежуток времени. Например, с помощью токен-бакета или счётчика запросов.

  2. Использование middleware или interceptor'ов — для подсчёта и контроля вызовов перед выполнением метода.

  3. Кэширование результатов — чтобы уменьшить количество вызовов к API при повторных запросах с одинаковыми параметрами.

  4. Аутентификация и авторизация — ограничение доступа к 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 в минуту.