Passa al contenuto principale

Errori, rate limit e affidabilità

Intermedio

Il codice in produzione dialoga con un servizio di rete, quindi deve aspettarsi che qualcosa fallisca. Un po' di struttura qui fa la differenza tra un'integrazione instabile e una affidabile.

La mappa degli errori

Gli status HTTP tipici che gestirai:

StatusSignificatoCosa fare
400Richiesta non validaCorreggi il payload; non riprovare così com'è
401API key errata/mancanteControlla le credenziali
403Non consentitoControlla accesso/permessi
429Rate limit raggiuntoFai backoff e riprova (rispetta retry-after)
500/529Errore del server / sovraccaricoRiprova con backoff

Gli SDK li espongono come eccezioni tipizzate, così puoi ramificare in modo pulito anziché analizzare stringhe.

Retry con backoff

Per gli errori transitori (429, 5xx), riprova con backoff esponenziale + jitter, con un limite massimo:

import time, random
for attempt in range(5):
try:
return client.messages.create(...)
except (RateLimitError, APIStatusError) as e:
if attempt == 4 or not should_retry(e):
raise
time.sleep(min(2 ** attempt + random.random(), 30))

(Molti SDK riprovano automaticamente gli errori transitori — conosci il comportamento predefinito del tuo client prima di aggiungere il tuo.)

Rate limit

I limiti si applicano per account/tier (richieste e token al minuto). Quando ne raggiungi uno ottieni un 429 con indicazioni temporali. Strategie: rispetta retry-after, smorza i picchi, raggruppa in batch il lavoro offline e usa un modello più economico (Scegliere un modello) per i passi ad alto volume.

Migrazione dei modelli

Gli ID dei modelli sono datati/versionati e finiscono per essere deprecati. Proteggiti:

Avanti