Теперь представьте ситуацию, когда я отправляю сообщения по адресу / Students / 7 /, но нет ученика с id = 7. Какой правильный HTTP-код в этой ситуации?
Я ожидал бы, что в этом случае будет использоваться 404.
Как отмечается Evert , целью "подресурса" является красная сельдь;Что касается HTTP, то нет никакой связи, подразумеваемой под написанием /students/7
и /students/7/addresses
.Это разные ресурсы.
(В этом вопросе есть некоторая путаница, поскольку в RFC 3986 обсуждается «иерархия» при обсуждении сегментов пути , но на самом деле речь идет о механике разрешения, икак точечные сегменты работают в относительном разрешении. Мы можем выровнять нашу иерархию идентификаторов с сегментами пути, но HTTP не предъявляет этого требования, и универсальные компоненты не могут предполагать, что это так).
Так что POST к /students/7/addresses
нужно понимать изолированно.Семантика HTTP очень похожа на семантику хранилища значений ключей - целевой URI запроса - это ключ, который дает вам доступ к представлениям.
В вашем конкретном случае у вас есть ключ, который ссылается на ресурс, которыйв настоящее время не существует в магазине.Это звучит очень похоже на 404 Not Found .
Код состояния 404 (Not Found) указывает, что исходный сервер не нашел текущее представление для целевого ресурсаили не желает раскрывать, что он существует.
Тело ответа обычно включает дополнительную информацию о том, что происходит, но мы, вероятно, хотим, чтобы общие компоненты HTTP воспринимали это так, как если бы это была орфографическая ошибка.в URL.
Майкл Кропат Хватит усложнять имеет полезное дерево решений для вопросов о кодах статуса.