Dati non validi restituiti, che HttpCode restituisce?

3

La mia applicazione web chiama un'API di terze parti.

Se richiamo correttamente l'API ma vengono restituiti dati non validi che non possono essere elaborati dal mio sistema, qual è il codice Http più appropriato da restituire all'utente che mi chiama?

  • 500, non sono convinto. Sebbene si trattasse di un errore interno, è dovuto a fattori esterni
  • 503, Forse, anche se molto vago
  • Gli errori
  • 400, 4XX sono in genere correlati al client che contatta il nostro server e quindi potrebbero essere fuorvianti.

Qual è la risposta più appropriata per tornare al mio cliente?

    
posta Liath 19.03.2014 - 11:50
fonte

1 risposta

10

Se il problema non è l'errore dell'utente / del client, il server dovrebbe restituire un errore 5xx. Un errore 4xx deve essere restituito solo se la richiesta > > < < non è corretto in qualche modo.

A seconda della situazione, 500 o 503 potrebbero essere appropriati:

  • Per quanto riguarda il cliente, i "fattori esterni" sono interni al tuo server / servizio. Quindi 500 potrebbe essere appropriato.

  • Se il problema si risolve da solo (o si risolve) in un periodo di tempo relativamente breve, 503 potrebbe essere appropriato.

Probabilmente uno di questi è OK.

Un'altra possibilità è quella di restituire un codice 5xx non standard. Nota che i codici di stato non standard (cioè non definiti nelle specifiche HTTP 1.1) non sono sbagliati. C'è un ampio precedente per fare questo ... incluso il precedente di altri RFC che definiscono codici extra; consulta la Lista dei codici di stato HTTP per esempi

di Wikipedia.

Ho notato un commento che suggerisce questo:

In that case I will go for 500, however your users might blame on you for the error.

A condizione di includere dettagli della causa del problema nel corpo delle 500 risposte (in un formato appropriato!), questo non dovrebbe essere un problema.

I'd output a proper page -- 200 code, informing them about the third-party call failure and will ask them to try it again later.

IMO, non è corretto. Un codice di 200 significa che la richiesta è riuscita ... che non ha in modo evidente. Supponendo che si tratti di un servizio RESTful, il cliente utilizzerà il codice di stato per decidere cosa fare dopo. Non dovrebbe essere una bugia. Se vuoi dire "riprova più tardi", dovresti inviare una risposta 503, possibilmente con un'intestazione Retry-After.

    
risposta data 19.03.2014 - 12:02
fonte

Leggi altre domande sui tag