Если запрос не может быть правильно проанализирован (включая объект / тело запроса), соответствующий ответ - 400 Bad Request [ 1 ].
RFC 4918 утверждает, что 422 Unprocessable Entity применима, когда объект запроса синтаксически правильно сформирован, но семантически ошибочен. Поэтому, если объект запроса искажен (например, неправильный формат электронной почты), используйте 400; но если это просто не имеет смысла (вроде @example.com
), используйте 422.
Если проблема в том, что, как указано в вопросе, имя пользователя / адрес электронной почты уже существует, вы можете использовать 409 Conflict [ 2 ] с описанием конфликта и подсказкой о том, как его исправить (в данном случае, «выберите другое имя пользователя / адрес электронной почты "). Однако в спецификации, как написано, 403 Forbidden [ 3 ] также может использоваться в этом случае, несмотря на аргументы о HTTP-авторизации.
412 Precondition Failed [ 4 ] используется, когда заголовок запроса предварительного условия (например If-Match
), который был предоставлен клиентом, оценивается как false. То есть клиент запросил что-то и предоставил предварительные условия, прекрасно зная, что эти предварительные условия могут потерпеть неудачу. 412 никогда не должны возникать на клиенте неожиданно и не должны быть связаны с объектом запроса как таковым .