2012-03-07 4 views
14

Scenario:per "no dati disponibili" da un'origine dati esterna

Una richiesta POST viene inviato ad elaborare un ordine che si tradurrà in recupero dei dati da un'origine dati esterna.

ci sono tre risultati possibili:

  1. L'origine dati restituito i dati per la richiesta
  2. Nessun dato è disponibile per la richiesta (questo è visto come un errore)
  3. L'origine dati non potrebbe essere letta (può essere di manutenzione)

Una risposta ovvia per è 200: OK o 01.237.562,120418 millions(un'entità viene creata da questa richiesta).

Qual codici di stato sarebbe opportuno per e ?

codici di stato mi hanno preso in considerazione:

  • 503: Service Unavailable quando origine dati è giù
  • 500: Internal Server Error quando origine dati è giù
  • 502: Bad Gateway quando "non sono disponibili dati"
  • 404: Not Found quando "non sono disponibili dati"
  • 403: Forbidden se "nessun dato disponibile"
  • 412: Precondition Failed quando "non sono disponibili dati"
+0

Si sta tentando di eseguire query sui dati utilizzando una richiesta POST? Non dovresti usare il metodo GET? –

+2

'GET' non è appropriato perché queste query di dati non sono né sicure né idempotenti (possono comportare lo scambio di denaro tra le altre cose). –

risposta

8

2) Guardando indietro a questo, sono d'accordo probabilmente dovrebbe essere un 204 No Content o forse un 200 con un corpo che indica alcun record o risorse potrebbe essere trovato a seconda la struttura è tornata. 404 vengono generalmente utilizzati quando l'URI della risorsa non esiste o una risorsa nell'URI non viene trovata nel caso di un servizio riposante.

3) 503 Servizio non disponibile

Il server è attualmente in grado di gestire la richiesta a causa di un sovraccarico temporaneo o di manutenzione del server. L'implicazione è che questa è una condizione temporanea che sarà alleviata dopo un certo ritardo. Se noto, la lunghezza del ritardo può essere indicata in un'intestazione Riprova dopo. Se non viene fornito alcun tentativo, il client DOVREBBE gestire la risposta come per una risposta 500.

Note: The existence of the 503 status code does not imply that a 
    server must use it when becoming overloaded. Some servers may wish 
    to simply refuse the connection. 
+1

Se una richiesta viene accettata dal server su questa risorsa, ma non è disponibile alcun dato da restituire, allora la 404 non ha molto senso. Sfortunatamente, non penso che ci sia un chiaro codice di stato che abbia senso qui, ma tenderei ad orientarmi maggiormente verso la risposta di 204 (o potenzialmente anche a 200 con un corpo che indica "Dati non disponibili"). – MandM

+0

204 è decisamente sbagliato se la richiesta http è considerata un errore. – Evert

+0

Dipende da cosa "considerato un fallimento" significa che se si sta cercando qualcosa e nessun risultato viene restituito, un 204 può essere accettabile. L'OP non ha fornito dettagli sufficienti per una risposta definitiva. Tutto quello che dobbiamo davvero fare è "Nessun dato disponibile per la richiesta", il caso di un problema che contatta l'origine dati viene gestito separatamente, quindi tutto quello che lascia è che qualcuno sta facendo una richiesta di dati che non esiste, che non sembra davvero una condizione di errore, quindi la gamma 2xx sembra ragionevole. – Dan675

22

3) Sono d'accordo con 503 per questo

2) Francamente penso che un buon argomento potrebbe essere fatto per l'utilizzo di 204 nel caso in cui 2 È possibile includere metainfo nell'intestazione per indicare specificamente che cosa 'è andato storto '. Dipende davvero da quanto consideri questo caso come un "errore" a livello di API.

Se l'API stessa funziona come previsto, e la richiesta era a un endpoint valido, da un utente autenticato e autorizzato e non ha causato il malfunzionamento del server, quindi molto pochi degli errori di serie 400 o 500 sembrerebbero davvero applicare.

per esempio, 404 di solito significa l'URI chiamato non esiste, se esiste, quindi utilizzando il codice è fuorviante, almeno IMHO

**10.2.5 204 No Content** 

Il server ha soddisfatto la richiesta, ma non lo fa è necessario restituire un corpo-entità e potrebbe voler restituire la metainformazione aggiornata. La risposta PU MAY includere nuove o aggiornate metainformazioni sotto forma di intestazioni di entità , che se presente DOVREBBE essere associata alla variante richiesta .

Se il client è un agente utente, NON DEVE cambiare la vista del documento da quella che ha causato l'invio della richiesta. Questa risposta è destinata principalmente a consentire l'immissione di azioni senza causando una modifica alla visualizzazione del documento attivo dell'agente utente, sebbene qualsiasi metainformation nuova o aggiornata DOVREBBE essere applicata al documento attualmente nella visualizzazione attiva dell'agente utente.

La risposta 204 NON DEVE includere un corpo del messaggio, quindi è sempre terminato dalla prima riga vuota dopo i campi dell'intestazione.

+4

Un altro modo "popolare" che sembra essere gestito è restituendo un messaggio di errore o una risposta vuota con un codice di stato HTTP 200. Anche questo è stato consultato su http://stackoverflow.com/questions/11402156/rest-status-code-204-on-paginated-result – Werner