Codici di risposta
| Codice | Significato | Ripetere? |
|---|---|---|
200 | La richiesta è stata compresa. Controllate gli esiti per pezzo | No |
400 | Il pacchetto o il JSON è stato rifiutato prima di leggere qualsiasi pezzo | Non senza correggerlo |
401 | La chiave è assente, non valida o revocata | No |
5xx | Problema nostro | Sì — conservate il file e riprovate |
Quello che trae in inganno
200 non significa che sia andato tutto bene.
I rifiuti di business vivono negli esiti per pezzo, non nello stato HTTP. Un file in cui tutti e tre i pezzi sono stati rifiutati restituisce comunque 200, perché la richiesta in sé è stata compresa e risposta correttamente.
Quindi il controllo non è mai soltanto if (status == 200) ok(). È:
status == 200 → leggere totais.recusadas e la lista itens
Abbiamo scelto questo invece di restituire 400 per un file parzialmente fallito perché il file non è atomico: con 97 pezzi creati e 3 rifiutati, né "successo" né "fallimento" è vero, e solo la lista delle voci dice cosa è realmente accaduto.
400 contro un pezzo rifiutato
Entrambi significano che qualcosa nel dato non va, ma avvengono in momenti diversi e richiedono gestioni diverse.
400 è l'intero pacchetto rifiutato prima che venga letta una riga — uno ZIP senza foglio nella radice, un'estensione non supportata, un foglio illeggibile. Il corpo è testo semplice, senza lista di voci, perché nessuna voce è mai esistita.
REJECTED dentro un 200 è una riga che ha fallito mentre le altre sono entrate. Correggete quella riga e reinviatela da sola.
5xx e cosa non fare
Un 5xx significa che il contenuto non è mai stato il problema. Rete, database, un difetto dalla nostra parte.
Conservate il file e riprovate. Non spostatelo in una cartella di errore, non segnate l'ordine come fallito, e non chiedete a qualcuno di riesportarlo dal vostro gestionale. Gli stessi byte funzioneranno quando saremo tornati.
È esattamente ciò che fa il Mover.Glass Connector presso di voi: un guasto di trasporto lascia il pacchetto nella cartella di ingresso per il ciclo successivo, e solo un rifiuto di contenuto lo sposta da parte. Se state scrivendo un vostro client, questa distinzione è quella che vale la pena copiare.