2015-10-09 23 views
5

Sto lavorando su un sistema che espone un'API REST. Il mio sistema, per soddisfare alcune richieste, ha bisogno di chiamare le API esterne. Queste API talvolta non riescono (con errori interni del server) e questi errori impediscono al sistema di completare l'operazione correttamente.Codice HTTP migliore per un errore di un sottosistema esterno

Qual è il miglior codice di stato HTTP che dovrebbe restituire il sistema? Vorrei distinguere i fallimenti dei sistemi esterni da guasti interni del mio sistema quindi non sono particolarmente contento di tornare 500.

+0

503 - Servizio non disponibile per errori esterni e 500 per interno? Oppure 504 - Timeout del gateway per errori esterni. – JaggenSWE

+0

ma questo non distingue ancora tra il mio sistema e le sue dipendenze. – jfu

+0

Lo fa, se il codice di errore restituito è 503/504 per le chiamate esterne che falliscono e 500 per le chiamate interne che falliscono c'è la tua distinzione. Lo costruisci nella tua applicazione per prendere un 500 da una chiamata esterna e restituirlo come 503/504 al tuo cliente. – JaggenSWE

risposta

8

Per questi casi io preferisco HTTP 502:

10.5.3 502 Bad Gateway

Il server, pur fungendo da gateway o proxy, ha ricevuto una risposta non valida dal server upstream a cui ha avuto accesso nel tentativo di soddisfare la richiesta.

Sebbene tecnicamente sia più adatto per i proxy, penso che sia il più vicino possibile distinguere un errore del server (500) da un errore del server upstream.

1

Si potrebbe anche prendere in considerazione di tornare HTTP 504 nel caso in cui la richiesta di un sistema esterno scaduta:

504 Gateway Timeout
Il server stava comportando come un gateway o proxy e non ha ricevuto una risposta tempestiva dal server upstream.

+0

Quello che trovo di solito è un errore (errore 500), non un timeout – jfu

+0

Sicuro. Sto solo dicendo che potresti voler _distinguere_ un errore da un timeout nel caso in cui accadrebbe :) –

Problemi correlati