当资源等待电子邮件 confirmation/activation 时,202 Accepted 是否合适?
Is 202 Accepted appropriate when a resource awaits email confirmation/activation?
对于我正在开发的 REST API,客户可以注册一家公司,随后需要通过电子邮件 confirmation/activation。收到以下示例请求后,将发送一封电子邮件,其中包含激活 link,以激活帐户。
POST /companies HTTP/1.1
<company>
<name>CoolCompany</name>
<email>coolcompany@example.com</email>
</company>
如果上述请求成功(有效数据,电子邮件成功发送),公司资源将保存在数据库中,但仅在 /companies/<id>
可用(给予适当的授权 header ) 收到确认后。
鉴于这种情况,是
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>
是一个更合适的回应?
我的想法是:
201 - 当所有 stuff/processing 在请求结束时完成(填充数据库、创建文件等),因此当客户端(立即事件)获取资源时,他将收到资源。
202 - 收到请求并成功开始处理,但根据流程的某些限制,没有处理所有与请求相关的活动。
你的情况:
如果同步发送电子邮件并且在发送电子邮件之前不return回复,那么我猜 201(Created) 没问题
例如,如果您将电子邮件发送任务设置到队列中并return立即发送给客户端,电子邮件可能会稍后发送(或者例如,在发送电子邮件之前操作员对新客户进行了一些手动处理) 比 202 好。
REST 是一个基于实体的概念。如果我收到 201 Created 响应,这将直观地表明资源已创建并且可用,但这种情况并非如此。该资源在确认后首先可用,因此我建议使用 202 Accepted header。
此外,您不能确定用户在请求时是否收到了电子邮件。我喜欢在这些情况下(短信、电子邮件等)使用 202 Accepted,因为它告诉 API 消费者这是一个有效请求,但可能需要一些时间才能完成。
对于我正在开发的 REST API,客户可以注册一家公司,随后需要通过电子邮件 confirmation/activation。收到以下示例请求后,将发送一封电子邮件,其中包含激活 link,以激活帐户。
POST /companies HTTP/1.1
<company>
<name>CoolCompany</name>
<email>coolcompany@example.com</email>
</company>
如果上述请求成功(有效数据,电子邮件成功发送),公司资源将保存在数据库中,但仅在 /companies/<id>
可用(给予适当的授权 header ) 收到确认后。
鉴于这种情况,是
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>
是一个更合适的回应?
我的想法是:
201 - 当所有 stuff/processing 在请求结束时完成(填充数据库、创建文件等),因此当客户端(立即事件)获取资源时,他将收到资源。
202 - 收到请求并成功开始处理,但根据流程的某些限制,没有处理所有与请求相关的活动。
你的情况:
如果同步发送电子邮件并且在发送电子邮件之前不return回复,那么我猜 201(Created) 没问题
例如,如果您将电子邮件发送任务设置到队列中并return立即发送给客户端,电子邮件可能会稍后发送(或者例如,在发送电子邮件之前操作员对新客户进行了一些手动处理) 比 202 好。
REST 是一个基于实体的概念。如果我收到 201 Created 响应,这将直观地表明资源已创建并且可用,但这种情况并非如此。该资源在确认后首先可用,因此我建议使用 202 Accepted header。
此外,您不能确定用户在请求时是否收到了电子邮件。我喜欢在这些情况下(短信、电子邮件等)使用 202 Accepted,因为它告诉 API 消费者这是一个有效请求,但可能需要一些时间才能完成。