API di FlavosoFondamentiLimiti di richieste
Limiti di richieste
120 richieste al minuto per collegamento. Ogni risposta indica quante ne restano; oltre il limite arriva 429 con Retry-After.
Il limite
Ogni collegamento può fare 120 richieste al minuto. Il limite vale per collegamento, quindi per locale: un'app con molti locali ha una quota propria per ciascuno. La finestra dura 60 secondi e inizia con la prima richiesta. GET /me indica il limite sotto rate_limit.
Chi interroga gli ordini ogni dieci secondi e nel frattempo segnala gli stati non ci arriva mai vicino.
Intestazioni
| Intestazione | Significato |
|---|---|
RateLimit-Limit | Richieste per finestra: 120. |
RateLimit-Remaining | Quante ne restano nella finestra in corso. |
RateLimit-Reset | Secondi fino all'inizio della nuova finestra. |
Retry-After | Solo con 429: secondi fino al prossimo tentativo. |
HTTP/1.1 200 OK
RateLimit-Limit: 120
RateLimit-Remaining: 3
RateLimit-Reset: 17Attendere e riprovare
Con 429 rate_limited aspetta Retry-After secondi e invia di nuovo la stessa richiesta. Se RateLimit-Remaining è a 0, aspetta RateLimit-Reset prima della richiesta successiva. Gestisci l'attesa per collegamento, non per tutta la tua app.
// One queue per connection: the limit counts per connection (= per restaurant).
const pausedUntil = new Map(); // connection id → time
export async function send(conn, request) {
const wait = (pausedUntil.get(conn.id) ?? 0) - Date.now();
if (wait > 0) await new Promise((r) => setTimeout(r, wait));
const res = await request();
const remaining = Number(res.headers.get("ratelimit-remaining"));
const reset = Number(res.headers.get("ratelimit-reset"));
if (res.status === 429) {
pausedUntil.set(conn.id, Date.now() + Number(res.headers.get("retry-after") ?? 1) * 1000);
return send(conn, request); // the same request again, after the pause
}
if (remaining === 0 && reset > 0) pausedUntil.set(conn.id, Date.now() + reset * 1000);
return res;
}Risparmiare richieste
- Webhook o GET /events invece di interrogazioni continue.
updated_sinceinvece di recuperare di nuovo tutto l'elenco.PUT /menuePOST /menu/availability(fino a 500 voci) invece di centinaia di singoliPATCH.- Leggere il menu una volta e poi seguire gli eventi
menu.*.
Autenticazioni fallite
Le richieste con un token che Flavoso non conosce, o senza token, vengono contate anche per indirizzo IP. Se da un indirizzo ne arrivano più di 30 al minuto, Flavoso risponde 429 invece di 401. Un tuo token scaduto o revocato non conta: riceve sempre 401, così puoi rinnovarlo, anche per molti locali insieme. Se servi molti locali da un solo server, segna un collegamento come chiuso non appena a un 401 segue invalid_grant durante il rinnovo, invece di continuare a riprovare.
L'endpoint del token ha limiti propri; lì la risposta è 429 temporarily_unavailable con Retry-After.
Qualcosa non è chiaro? Scrivi a support@flavoso.com indicando l'identificativo di X-Request-Id. Così troviamo la tua richiesta nel registro.