Головна/Початок роботи/Ліміти запитів ENУКРРУС API-довідник (ReDoc) ↗

Ліміти запитів

Бюджети на принципала за групами ендпоїнтів — і як 429 просить пригальмувати.

Ліміти застосовуються після автентифікації, з ключем за перевіреною ідентичністю — атакувальник із поганим токеном не витрачає нічого, а принципали ніколи не конкурують між собою. Вичерпаний бюджет відповідає 429 RATE_LIMITED із заголовком Retry-After, що тримає секунди до наступного слота.

Бюджети

Група Стосується За замовчуванням Ключ
resolve POST /internal/v1/credentials/resolve 100 r/s, burst 200 сервісний client_id
user read усі GET користувацької площини (каталог, credentials, статус) 120/min sub токена
user mutations POST/PATCH/DELETE користувацької площини на credentials 30/min sub токена
admin /v1/admin/* та /internal/v1/admin/* 60/min sub, плюс мітка X-Admin-Actor на сервісній площині
reveal POST .../credentials/{id}/reveal 10/min sub + мітка оператора
health /health/* без ліміту

Числа — це конфігурація деплойменту (ліміт 0 вимикає свою групу); значення вище — за замовчуванням, і їх наведено для кожного ендпоїнта в довіднику ReDoc.

Три деталі, які варто знати:

  • Персональні credentials і credentials організації ділять один бюджет. Ключ — ваш sub, тож мутації на /v1/credentials і /v1/org-credentials тягнуть з одних 30/min.
  • Оператори адмін-панелі не тротлять одне одного. На внутрішній адмін-площині ключ включає мітку X-Admin-Actor, тож кожен названий оператор отримує власні 60/min.
  • Reveal навмисно дефіцитний. Десять reveal на хвилину на оператора — це людина, що інспектує ключі, а не скрипт, що обходить сховище; в цьому й суть (Reveal).

Обробка 429

import time
import httpx

def call_with_backoff(request):
    while True:
        response = request()
        if response.status_code != 429:
            return response
        time.sleep(int(response.headers.get("Retry-After", "1")))

Бюджети — на репліку, і поповнюються вони неперервно; одного дотриманого Retry-After зазвичай досить.