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à