Если при создании RESTful API пользователь предоставляет id несуществующего ресурса, следует вернуть 404 Not Found
или 400 Bad Request
.
Например:
https://api.domain.com/v1/resource/foobar
Где foobar не существует.
Если при создании RESTful API пользователь предоставляет id несуществующего ресурса, следует вернуть 404 Not Found
или 400 Bad Request
.
Например:
https://api.domain.com/v1/resource/foobar
Где foobar не существует.
Я бы вернул 404 в случае, если ресурс не существует (означает, что URL-адрес неверен), и я верну 400, только если оставшийся вызов сделан с некоторыми неверными данными (@PathParam), например,
https://api.domain.com/v1/profile/test@email: здесь я пытаюсь получить профиль идентификатора электронной почты , но адрес электронной почты неверный, поэтому я верну 400.
https://api.domain.com/v1/profile1111/[email protected] вернет 404, потому что URL-адрес недействителен.
Должно быть 404 (не найдено). 400 используется, если вы не можете выполнить запрос из-за плохого синтаксиса, однако для вашего случая синтаксис правильный, однако ресурса foobar нет.
Вы можете использовать 400, если пользователь использует несуществующий API, как показано ниже:
https://api.domain.com/v1/nonexistAPI/xyz/xyz
Вы также можете обратиться к этому блогу REST API Design, в котором рассказывается, как создавать коды ошибок REST.
Я думаю, что 404 Not Found
- правильный ответ, 400
больше касается тела запросов, а не идентификатора ресурса, поэтому, например, вы можете отправить это по ошибкам проверки.
Это действительный запрос? Может ли существовать идентификатор ресурса? Он отформатирован как правильный идентификатор? Это синтаксически правильно? и т.д.. Если да, то вы можете использовать 404 Not Found
. В противном случае больше подходит 400 Bad Request
.
Согласно RFC (https://tools.ietf.org/html/rfc2616#section-10.4) API должен возвращать 404, когда
"Сервер не нашел ничего, соответствующего Request-URI",
что является вашим примером.
400 будет, когда ресурс найден, но сам запрос искажен.
Например: я. https://api.domain.com/v1/resource/foobar
где foobar НЕ существует, должен возвращать 404
II. https://api.domain.com/v1/resource/foobar, где foobar ДЕЙСТВУЕТ существует, но запрос неверен (например, {age:"NOTANINTEGER"}
, string
вместо int
), он должен вернуть 400.
Надеюсь, я смог помочь.
404
будет более распространенной практикой. Это для Resource Not Found
. В вашем случае конкретный URL-адрес не найден.
400
обычно используется вместо Bad Request
. Вы можете использовать это для любого плохого запроса. Например. MissingRequiredQueryParameter
, InvalidInput
.