Qual è il codice di stato della risposta corretto al POST quando la risorsa genitore non viene trovata?

6

Ho il seguente endpoint:

a/{id}/b

e vuoi creare un b con l'invio della richiesta di POST ad esso. Se a con data {id} non viene trovato, dovrei rispondere con 404 NOT_FOUND o forse con 409 CONFLICT ?

Gestire semplicemente a/{id} , il trucco è che qui viene utilizzata una risorsa secondaria.

    
posta Opal 24.01.2018 - 11:36
fonte

2 risposte

9

404 NOT FOUND sembra la risposta appropriata, perché la risorsa con questo ID non esiste. È molto chiaro capire e ci si aspetta la stessa risposta se si chiama a/{id} .

409 CONFLICT non mi sembra la scelta migliore, perché nell'esempio restituirai un 409 quando la risorsa genitore era non trovata :).

Ma ricorda che la cosa più importante è essere coerenti nella tua API

    
risposta data 24.01.2018 - 12:13
fonte
4

Oltre alla risposta di @ Dherik.

Gli URI sono identificatori , quindi dobbiamo tenere presente che ( /a/{id}/b è un identificatore). L' URI non ha alcun significato per il WWW, così come lo è per il client HTTP.

404 è la risposta giusta . In sostanza, il server sta rispondendo

I didn't find any resource with such id. Resource not found 1

Se la risorsa mancante è genitore o figlio non ha importanza.

Noi, sviluppatori, vediamo le gerarchie e i percorsi nell'URI, ma i client HTTP no. In altre parole, l'HTTP è inteso solo per essere interpretato dai client HTTP ma non dagli umani (sviluppatori, utenti finali, ecc.).

In caso di dubbi, non chiedere quale codice abbia senso per te (umano). Chiedi, quale codice ha senso per il client HTTP. Come vuoi che si comporti il client HTTP?

Perché? Poiché alcuni codici di stato fanno sì che questi client eseguano determinate operazioni. Ad esempio, 302 . Questo codice di solito rende i browser Web reindirizzati a una posizione specifica (URI) informati nelle intestazioni di risposta.

Potrebbe non essere il tuo caso, ma è importante essere consapevoli. In definitiva, i codici di stato HTTP sono indirizzati ai client HTTP. Non alle nostre applicazioni. Non alle persone.

1: 409 viene raramente implementato come errore di navigazione . Di solito comporta l'esecuzione di operazioni remote (cancella, aggiorna, nuova, ecc.). Ma l'URI dovrebbe esistere. Altrimenti, 404 prevarrà

    
risposta data 24.01.2018 - 22:26
fonte

Leggi altre domande sui tag