Oltre alla risposta di @ Dherik.
Gli URI sono identificatori , quindi dobbiamo tenerlo presente ( /a/{id}/b
è un identificatore). L' URI non ha significato per il WWW, così come per il client HTTP.
404 è la risposta giusta . In sostanza, il server sta rispondendo
Non ho trovato alcuna risorsa con tale ID. Risorsa non trovata
1
Non importa se la risorsa mancante è genitore o figlio .
Noi sviluppatori sviluppiamo gerarchie e percorsi nell'URI, ma i client HTTP no. In altre parole, HTTP deve essere interpretato solo 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é un codice di stato causa questi client per eseguire determinate operazioni. Ad esempio, 302 . Questo codice di solito consente ai browser Web di reindirizzare verso una posizione specifica (URI) informata nelle intestazioni di risposta.
Questo potrebbe non essere il tuo caso, ma è importante essere consapevoli. In definitiva, i codici di stato HTTP sono indirizzati ai client HTTP. Non per le nostre applicazioni. Non alle persone.
1: 409 viene implementato raramente come errore di navigazione. Di solito comporta l'esecuzione di operazioni remote (eliminazione, aggiornamento, nuovo, ecc.). Ma l'URI dovrebbe esistere. Altrimenti, prevarrà 404