Я прочитал много сообщений и статей о правильном коде статуса http для возврата при ошибке запроса клиента. Другие предлагают использовать 400, как это было переопределено в RFC 7231, хотя я Я не уверен, что приведенный пример охватывает все ошибки клиента, которые я представлял себе, потому что примеры являются синтаксическими.
Код состояния 400 (неверный запрос) указывает, что сервер не может или не будет обрабатывать запрос из-за того, что воспринимается как ошибка клиента (например, неверный синтаксис запроса, недопустимый запрос
кадрирование сообщения или обманчивая маршрутизация запроса) .
Я нашел это утверждение в Приложении B RFC 7231:
Код состояния 400 (неверный запрос) был смягчен, поэтому он не ограничивается синтаксическими ошибками. (Раздел 6.5.1)
Означает ли это, что я могу считать любую ошибку клиента плохим запросом? Было бы лучше использовать 400 для клиентских запросов и просто указать в сообщении более конкретную ошибку?
С другой стороны, другие говорят, что лучше использовать 422 (Unprocessable Entity). Хотя он больше ориентирован на семантику, он указан только в RFC 4918, который является расширением webDAV для http /1.1
Код состояния 422 (Unprocessable Entity) означает, что сервер
понимает тип содержимого объекта запроса (следовательно, код состояния
415 (Unsupported Media Type) не подходит), а синтаксис
объекта запроса правильный (таким образом, код состояния 400 (неверный запрос)
недопустим), но не смог обработать содержащиеся инструкции. Например, это состояние ошибки может возникнуть, если тело запроса XML
содержит правильно сформированные (т. Е. Синтаксически правильные), но семантически ошибочные инструкции XML.
Могу ли я использовать коды расширения webDAV для обработки моих HTTP-запросов? В случае 422, могу ли я использовать его, даже если его нет в основных кодах http.
Должен ли я использовать 400 или 422 для моей ошибки клиента?
Вот возможные ошибки клиента, которые я имею в виду:
1.) Invalid parameter. The client provided parameters but are found invalid. Example: I said that the userId is 1, but when I checked there's no userId of 1. Another example of invalid parameter is wrong data type.
2.) Missing required parameters
3.) Let's say I need to hash a value based on given params and it failed
4.) Blocked content is being used. Like, i want to apply for membership and i passed the userId of 1. However, userId of one is blocked / deactivated
5.) When I try to delete an entry but the entry is still being used in another table.
6.) Let's say i require a signature in my payload and the signature does not match when recalculated in the backend
7.) Let's say I have a value that counts a specific attribute like "shares" and it has reached the maximum value like 10.
etc...
Мы будем благодарны за любой информативный ответ. Спасибо большое, ребята!
Обновление: я проверил ошибки google api, и они не используют 422. С другой стороны, Twitter использует 422. Я запутался больше, чем когда-либо>. ‹Хотя есть часть меня, которая думает, что 400 - лучший выбор, поскольку он включен в документе RFC, а 422 - нет. Хотя я мог ошибаться.