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

IntestazioneSignificato
RateLimit-LimitRichieste per finestra: 120.
RateLimit-RemainingQuante ne restano nella finestra in corso.
RateLimit-ResetSecondi fino all'inizio della nuova finestra.
Retry-AfterSolo con 429: secondi fino al prossimo tentativo.
HTTP/1.1 200 OK
RateLimit-Limit: 120
RateLimit-Remaining: 3
RateLimit-Reset: 17

Attendere 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_since invece di recuperare di nuovo tutto l'elenco.
  • PUT /menu e POST /menu/availability (fino a 500 voci) invece di centinaia di singoli PATCH.
  • 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.