#java #spring #rest #http #error-handling
#java #spring #rest #http #обработка ошибок
Вопрос:
Рассмотрим /v1/api/people/{id}
обработку конечной точкой операций GET, PUT и DELETE, где id
это целое число.
Мне интересно, как обычно следует обрабатывать следующие два случая?
a). при передаче id
не существует в базе данных, например, id = 100
но нет объекта с таким идентификатором
b). при передаче id
имеет неправильный тип, например, это строка "oops"
Представьте, что обе вышеуказанные ошибки никогда на самом деле не происходят в реальном приложении (потому что, например, приложение имеет «правильный» рабочий процесс и некоторую проверку на стороне клиента).
Тем не менее, я все еще могу вызвать вышеупомянутые ошибки, скажем, в Postman или если что-то изменится в будущем, верно? Я хочу предотвратить эти ошибки в будущем.
Следует ли оставить его как HTTP 500 или, возможно, его следует обрабатывать как HTTP 400 или HTTP 404? Является ли HTTP 500 когда-либо приемлемым?
Комментарии:
1. 400 неверных запросов для нецелого числа и 404 Not Found для несуществующего идентификатора кажутся нормальными.
Ответ №1:
HTTP 500 — следует использовать как внутреннюю ошибку сервера, означающую, что на стороне сервера произошло что-то неожиданное . вышеуказанные ошибки в идеале должны быть частью проверки, поскольку они являются известными сценариями
a). когда переданный идентификатор не существует в базе данных, например id = 100, но нет объекта с таким идентификатором
- здесь вы должны вернуть 404 (не найден) с сообщением об ошибке типа «ресурс с идентификатором 100 отсутствует для удаления / обновления и т.д.», Чтобы сделать его удобным для пользователя
б). когда переданный идентификатор имеет неправильный тип, например, это строка «oops»
- здесь вы должны показать 400 (неверный запрос), поскольку пользователь не передает значение в соответствии с соглашением, которое является идентификатором ресурса.