Какой код ответа HTTP для "Это письмо уже зарегистрировано"? - программирование
Подтвердить что ты не робот

Какой код ответа HTTP для "Это письмо уже зарегистрировано"?

Я создаю RESTful API для создания пользователей, которые применяют уникальные адреса электронной почты:

Успешно POST /users: HTTP 201 Created

Если я POST тот же адрес электронной почты снова, каков должен быть код ответа? Является ли 409 Conflict подходящим кодом ответа?

4b9b3361

Ответ 1

Да, 409 является наиболее подходящим кодом ответа здесь. Несмотря на то, что вы, скорее всего, вернетесь к успеху, вы по-прежнему используете POST для ресурса, который описывается как коллекция, а POST дублирование электронной почты, безусловно, является конфликтом с "текущим состоянием ресурса" в виде коллекции. Вы должны вернуть тело ответа с описанием проблемы и гиперссылки, чтобы помочь решить проблему, если это возможно.

Ответ 2

В то время как принятый ответ правилен в отображении правильного кода состояния для задачи, я хочу добавить, что вы вводите уязвимость безопасности.

Если вы возвращаете учетную запись 409, вы просто показываете сервис для перечисления учетной записи.

Зависит от приложения, если api является общедоступным или нет и т.д., вы можете вернуть 201, даже если учетная запись не была создана.

Ответ 3

Я часто использую (расширение WebDAV) HTTP 422 Непроцессная организация:

Запрос был хорошо сформирован, но не удалось выполнить его из-за семантических ошибок

Ответ 4

+1 к ответу на Барты - по соображениям безопасности. Обычно я бы согласился, что 409 - хороший код состояния для sth. что уже существует. Но в среде учетных записей пользователей/аутентификации/авторизации и т.д. Я бы не стал подвергать существующие учетные записи пользователей вашей базе данных.

Конечно, в этом месте есть другие механизмы управления безопасностью. Если вы не возражаете раскрывать небольшое количество своих учетных записей, вы можете добавить поведение к вашему приложению, которое возвращает 401 или 403 в многочисленных 409-событиях с одного IP-адреса.

Другой вариант (в общем случае) заключается в том, чтобы определить код состояния самостоятельно, чтобы иметь 2xx, который отличается от существующих стандартных вариантов 2xx. Это может быть вариант, если вы не хотите обрабатывать "уже существует" как ошибку. Однако это будет считаться нестандартным и будет иметь такой же небезопасный характер, как и 409 в вашем конкретном примере.