HTTP 404 против 400 для неверных параметров запроса

Вот мой запрос URL:

http://server.com/app/user/getuser/?userId=9999

Обратите внимание, что userId это параметр запроса. Не встроенный параметр пути.

Я понимаю, что если URL-адрес запроса: http://server.com/app/user/getuser/9999 и идентификатор 9999 не существует в базе данных, следует использовать 404.

НО какой статус HTTP следует использовать для случая userId такое параметр запроса? Прямо сейчас я возвращаю 400 вместо 404.

2 ответа

Я бы использовал 404 Not Found.

Зачем?

RFC 7231 определяет ответ 400 Bad Request следующим образом:

Код состояния 400 (неверный запрос) указывает на то, что сервер не может или не будет обрабатывать запрос из-за чего-то, что воспринимается как ошибка клиента (например, синтаксис искаженного запроса, формирование кадра сообщения о недействительном запросе или обманчивая маршрутизация запроса).

... поскольку ваш запрос действителен и вы просто пытаетесь получить доступ к несуществующему ресурсу, я думаю, что статус 404 Not Found более адаптирован. RFC 7231 определяет его значение следующим образом:

Код состояния 404 (не найден) указывает на то, что исходный сервер не нашел текущее представление для целевого ресурса или не хочет раскрывать его.

На мой взгляд, если «пользователь» является ресурсом, лучший способ раскрыть этот ресурс — использовать такой URL-адрес: http://server.com/app/user/9999 .

Параметры запроса лучше всего подходят для поиска в наборе данных, где пустой ответ все еще действителен (200).

Но, если вы не можете изменить URL-адрес, 404 в этом случае является допустимым вариантом.

Другие вопросы по тегам