2013-03-13 5 views
9

Sto cercando indicazioni per il codice di risposta corretto & messaggio quando si richiede una risorsa che fa parte di un'altra risorsa.Codice/messaggio API REST per risorsa madre mancante

Ad esempio, una richiesta GET on:

utenti/{id}

in cui l'utente non esiste sarebbe tornato un 404, con un messaggio di utente risorsa non trovato.

La mia domanda è, quale dovrebbe essere il seguente ritorno quando nessun utente risorsa viene trovato:

utenti/{id}/amici

Attualmente sto tornando lo stesso codice/messaggio come nel primo esempio . Dovrei restituire un messaggio relativo specificamente alla risorsa amici? Personalmente ritengo sia più utile rendere il client API consapevole del fatto che la risorsa genitore non viene trovata, in caso si abbia una catena di URI più grande.

risposta

6

In questo particolare esempio, se il punto è quello di consentire al client di distinguere tra una richiesta di amici per un utente inesistente e una richiesta di amici per un utente che semplicemente non ha amici, penso che sarebbe più sensato per restituire 404 nel primo caso e 200 con un set vuoto nel secondo.

In altre parole, "nessuno" è un valore valido per gli amici. Non esiste un caso in cui un utente esista ma la sua (potenzialmente vuota) lista di amici no, quindi non c'è mai alcuna ambiguità nell'emettere un 404 per la risorsa genitore.

+0

Sto meditando lo stesso dell'OP e questo mi sembra il modo giusto anche per il mio particolare caso d'uso. Per aggiungere ulteriormente al tuo caso, [Wikipedia] (https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) afferma che per un "404" "le richieste successive da parte del cliente sono consentite". Penso che questo sia corretto perché è possibile che a un certo punto un utente con quell'ID inizi a esistere, mentre un '400' implica che la richiesta è stata negativa a causa di un errore del client e non potrebbe mai essere valida in futuro. – djskinner

1

Sarei tentato di restituire un'intestazione 400 Bad Request e inserire il messaggio di errore nel corpo della risposta. Sfortunatamente non c'è una risposta giusta o sbagliata in questo scenario, quindi scegli quello che funziona meglio per te e per la tua applicazione.