В дополнение к ответу @ Дерик.
URI являются идентификаторами , поэтому мы должны помнить, что ( /a/{id}/b
это идентификатор). URI не имеет смысла для WWW, и поэтому для клиента HTTP.
404 правильный ответ . По сути, сервер отвечает
Я не нашел ни одного ресурса с таким идентификатором. Ресурс не найден
1
Является ли отсутствующий ресурс родительским или дочерним, не имеет значения.
Мы, разработчики, видим иерархии и пути в URI, а клиенты HTTP - нет. Другими словами, HTTP предназначен для интерпретации только HTTP-клиентами, но не людьми (разработчиками, конечными пользователями и т. Д.).
В случае сомнений не спрашивайте, какой код имеет смысл для вас (человека). Спросите, какой код имеет смысл для HTTP-клиента. Как вы хотите, чтобы HTTP-клиент вел себя?
Почему? Потому что некоторый код состояния заставляет этих клиентов выполнять определенные операции. Например, 302 . Этот код обычно заставляет веб-браузеры перенаправлять в определенное местоположение (URI), указанное в заголовках ответа.
Это может быть не ваш случай, но важно знать. В конечном итоге коды состояния HTTP адресованы клиентам HTTP. Не для наших приложений. Не для людей.
1: 409 редко реализуется как ошибка навигации. Обычно это включает выполнение удаленных операций (удаление, обновление, новые и т. Д.). Но URI должен существовать. В противном случае будет преобладать 404