Является ли 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.