En plus de la réponse de @ Dherik.
Les URI sont des identifiants , nous devons donc garder à l'esprit que ( /a/{id}/b
est un identifiant). L' URI n'a pas de sens pour le WWW, tout comme pour le client HTTP.
404 est la bonne réponse . En substance, le serveur répond
Je n'ai trouvé aucune ressource avec un tel identifiant. Ressource introuvable
1
Que la ressource manquante soit parent ou enfant n'a pas d'importance.
Nous, développeurs, voyons les hiérarchies et les chemins dans l'URI, mais pas les clients HTTP. En d'autres termes, HTTP est uniquement destiné à être interprété par les clients HTTP mais pas par les humains (développeurs, utilisateurs finaux, etc.).
En cas de doute, ne demandez pas quel code a du sens pour vous (humain). Demandez-vous quel code a du sens pour le client HTTP. Comment voulez-vous que le client HTTP se comporte?
Pourquoi? Parce qu'un code d'état oblige ces clients à effectuer certaines opérations. Par exemple, 302 . Ce code oblige généralement les navigateurs Web à rediriger vers un emplacement spécifique (URI) informé dans les en-têtes de réponse.
Ce n'est peut-être pas votre cas, mais il est important d'en être conscient. En fin de compte, les codes d'état HTTP sont adressés aux clients HTTP. Pas à nos applications. Pas aux personnes.
1: 409 est rarement implémenté comme erreur de navigation. Cela implique généralement l'exécution d'opérations à distance (suppression, mise à jour, nouvelle, etc.). Mais l'URI devrait exister. Sinon, 404 prévaudra