Vai al contenuto

Rate limiting

La maggior parte degli endpoint dell'API è soggetta a rate limiting. Con il rate limiting, i client possono effettuare solo un certo numero di richieste entro un limite di tempo specifico.

Quando il rate limiting è attivo su un endpoint, ogni risposta include un insieme di header che consentono al client di conoscere lo stato attuale del limite. Gli header seguono la convenzione standard draft-ietf-httpapi-ratelimit-headers.

Header di rate limiting

Presenti su ogni risposta:

  • RateLimit-Limit: numero massimo di richieste consentite al client nella finestra corrente.
  • RateLimit-Remaining: numero di richieste ancora disponibili per il client nella finestra corrente.
  • RateLimit-Reset: secondi mancanti al rinnovo dei permessi del client.
  • RateLimit-Policy: la policy applicata, nel formato <limite>;w=<finestra in secondi> (ad esempio 30;w=1 significa 30 richieste ogni secondo).

Quando il limite è stato raggiunto, le richieste successive all'interno della finestra ottengono una risposta 429 Too Many Requests. In questo caso la risposta include anche l'header standard:

  • Retry-After: secondi da attendere prima di inviare una nuova richiesta.

Note

Il limite per singolo client è attualmente di 30 richieste al secondo (il limite globale aggregato su tutta l'API è di 100 richieste al secondo). Questi valori sono soggetti a modifiche in qualsiasi momento; i client dovrebbero quindi considerare e sfruttare le informazioni di rate limiting presenti in ogni risposta anziché basarsi su valori fissi.

Esempio

In una risposta andata a buon fine, il client ha effettuato 3 richieste delle 30 disponibili nel secondo corrente, e ne restano quindi 27:

RateLimit-Limit: 30
RateLimit-Remaining: 27
RateLimit-Reset: 1
RateLimit-Policy: 30;w=1

Quando il limite viene superato, la risposta è 429 Too Many Requests e indica con Retry-After (e RateLimit-Reset) i secondi da attendere prima di riprovare:

HTTP/1.1 429 Too Many Requests
RateLimit-Limit: 30
RateLimit-Remaining: 0
RateLimit-Reset: 1
RateLimit-Policy: 30;w=1
Retry-After: 1