Skip to content

RateLimiter

RateLimiter — класс для контроля частоты запросов к Rest API. Singleton экземпляр доступен через свойство rest.rateLimiter после инициализации Frame.

Автоматически ограничивает количество запросов в секунду, ставит запросы в очередь при превышении лимита и повторяет запросы при получении ошибки HTTP 429.

ts
import { RateLimiter } from '@aspro-cloud/miniapp-jssdk'

Свойства

lastRequestTime

Временная метка (мс) последнего отправленного запроса

ts
get lastRequestTime(): number

limit

Максимальное количество запросов в секунду. Значение заполняется из контекста при первом вызове Rest API методами Rest.get() или Rest.post(). Значение -1 означает, что лимит ещё не получен из контекста

ts
get limit(): number

processing

Количество запросов, обрабатываемых в текущий момент

ts
get processing(): number

remaining

Количество оставшихся запросов до достижения лимита. Значение обновляется при получении каждого ответа запроса Rest API

ts
get remaining(): number

reset

Временная метка (мс), после которой лимит сбрасывается. Значение обновляется при получении каждого ответа запроса Rest API

ts
get reset(): number

Методы

getInstance

Возвращает текущий singleton экземпляр RateLimiter

ts
static getInstance(): RateLimiter

destroy

Удаляет подписки и освобождает ресурсы

ts
destroy(): void

Пример

ts
import { App, RateLimiter, Rest } from '@aspro-cloud/miniapp-jssdk'

await App.initializeFrame()

const rest = Rest.getInstance()
const rateLimiter = RateLimiter.getInstance()

// Получение текущего пользователя
const user = await rest.get('/core/user/get/')

// Чтение текущих значений лимитов
console.log({
  limit: rateLimiter.limit,
  remaining: rateLimiter.remaining,
  reset: rateLimiter.reset,
})
js
const App = window.ACloudMiniApp

const frame = await App.initializeFrame()

// Получение текущего пользователя
const user = await frame.rest.get('/core/user/get/');

// Чтение текущих значений лимитов
console.log({
  limit: frame.rest.rateLimiter.limit,
  remaining: frame.rest.rateLimiter.remaining,
  reset: frame.rest.rateLimiter.reset,
});

Опубликовано под лицензией MIT.