Além da resposta de @ Dherik.
URIs são identificadores , portanto, devemos ter em mente que ( /a/{id}/b
é um identificador). O URI não faz sentido para a WWW, assim como para o cliente HTTP.
404 é a resposta certa . Em essência, o servidor está respondendo
Não encontrei nenhum recurso com esse ID. Recurso não encontrado
1
Se o recurso ausente é pai ou filho , não importa.
Nós, desenvolvedores, vemos hierarquias e caminhos no URI, mas os clientes HTTP não. Em outras palavras, o HTTP deve ser interpretado apenas por clientes HTTP, mas não por humanos (desenvolvedores, usuários finais, etc.).
Em caso de dúvida, não pergunte que código faz sentido para você (humano). Pergunte, qual código faz sentido para o cliente HTTP. Como você deseja que o cliente HTTP se comporte?
Por quê? Porque algum código de status faz com que esses clientes executem determinadas operações. Por exemplo, 302 . Esse código geralmente faz com que os navegadores da web redirecionem para um local específico (URI) informado nos cabeçalhos de resposta.
Pode não ser o seu caso, mas é importante estar ciente. Por fim, os códigos de status HTTP são endereçados aos clientes HTTP. Não para nossas aplicações. Não para pessoas.
1: 409 raramente é implementado como erro de navegação. Geralmente envolve a execução de operações remotas (excluir, atualizar, novo, etc). Mas o URI deve existir. Caso contrário, 404 prevalecerá