Согласно приведенному ниже сценарию,
Допустим, кто-то делает запрос на ваш сервер с данными, которые имеют правильный формат, но просто не являются «хорошими» данными. Например, представьте, что кто-то отправил значение String в конечную точку API, которая ожидала значение String; но значение строки содержало данные, занесенные в черный список (например, не позволяющие людям использовать «пароль» в качестве пароля). тогда код состояния может быть 400 или 422?
До сих пор я бы возвратил «400 Bad Request», что, согласно w3.org, означает:
Сервер не может понять запрос из-за неправильного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений.
Это описание не совсем соответствует обстоятельствам; но если вы идете по списку основных кодов состояния HTTP, определенных в протоколе HTTP / 1.1, это, вероятно, ваш лучший выбор.
Однако недавно кто-то из моей команды разработчиков указал [мне], что популярные API-интерфейсы начинают использовать расширения HTTP, чтобы получить более детализированный отчет об ошибках. В частности, многие API, такие как Twitter и Recurly, используют код состояния «422 Unprocessable Entity», как определено в расширении HTTP для WebDAV. Код состояния HTTP 422 гласит:
Код состояния 422 (Unprocessable Entity) означает, что сервер понимает тип содержимого объекта запроса (следовательно, код состояния 415 (Unsupported Media Type) является неподходящим), и синтаксис объекта запроса является правильным (таким образом, 400 (неверный запрос) ) код состояния не подходит), но не удалось обработать содержащиеся в нем инструкции. Например, это условие ошибки может возникнуть, если тело запроса XML содержит правильно сформированные (то есть синтаксически правильные), но семантически ошибочные инструкции XML.
Возвращаясь к нашему примеру с паролем сверху, этот код состояния 422 кажется гораздо более подходящим. Сервер понимает, что вы пытаетесь сделать; и он понимает данные, которые вы отправляете; это просто не позволит этим данным быть обработанными.