2016-06-24 1 views
4

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

POST /companies HTTP/1.1 

<company> 
    <name>CoolCompany</name> 
    <email>[email protected]</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> 

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

ответ

3

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

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

+0

Да, вы помогли убедить меня в 202. Спасибо! –

2

Моя идея:

201 - это когда весь материал/обработка завершается в конце запроса (DB заселена, файлы, созданные и т.д.), поэтому, когда клиент (событие сразу) GET ресурс, он будет получить его полностью.

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

В вас так:

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

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

Смежные вопросы