Является ли 202 Приемлемым, когда ресурс ожидает подтверждения / активации по электронной почте?

Для REST API, который я разрабатываю, клиент может зарегистрировать компанию, которая впоследствии нуждается в подтверждении / активации по электронной почте. После получения следующего примера запроса отправляется электронное письмо со ссылкой для активации для активации учетной записи.

POST /companies HTTP/1.1

<company>
  <name>CoolCompany</name>
  <email>coolcompany@example.com</email>
</company>

Если вышеуказанный запрос был успешным (действительные данные, электронная почта успешно отправлена), ресурс компании сохраняется в базе данных, но будет доступен только на /companies/<id> (с соответствующим заголовком авторизации) после получения подтверждения.

Учитывая этот сценарий, является

HTTP/1.1 202 Accepted
// Perhaps optionally with a Location header, 
// of where the resource will be available, as well?
Location: /companies/<id>

соответствующий ответ? Или будет

HTTP/1.1 201 Created
Location: /companies/<id>

быть более подходящим ответом?

2 ответа

Решение

REST - это основанная на сущности концепция. Если бы я получил ответ 201 Created, это бы подсказало, что ресурс был создан и доступен, что не соответствует действительности. Ресурс впервые доступен после подтверждения, и поэтому я бы предложил использовать заголовок 202 Accepted.

Кроме того, вы не можете быть уверены, что пользователь получил электронное письмо во время запроса. Мне нравится использовать 202 Accepted в подобных случаях (SMS, электронная почта и т. Д.), Потому что он сообщает потребителю API, что это был действительный запрос, но может пройти некоторое время, прежде чем он будет выполнен.

Моя идея такова:

201 - это когда весь материал / обработка завершается в конце запроса (заполнение БД, создание файлов и т. Д.), Поэтому, когда клиент (событие немедленно) ПОЛУЧИТ ресурс, он получит его завершенным.

202 - это когда запрос получен и успешно начата обработка, но в соответствии с некоторыми ограничениями процесса не все действия, связанные с запросом, обрабатываются.

В вашем случае:

если отправлять электронную почту синхронно и не возвращать ответ до тех пор, пока электронная почта не отправлена, то я предполагаю, что 201(Создано) в порядке

например, если вы поставили задачу отправки электронной почты в очередь и сразу же вернулись к клиенту, а электронная почта может быть отправлена ​​чуть позже (или, например, оператор обрабатывает новых клиентов вручную перед отправкой электронной почты), чем лучше 202.

Другие вопросы по тегам