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