发送电子邮件失败的HTTP状态码

3
考虑一个创建用户的API调用。成功后,用户将被创建并发送确认电子邮件。响应状态码为201。
如果未能创建用户,则响应状态码为422。
如果用户已创建但发送确认电子邮件失败,响应状态码应该是什么?

为什么这也不是422呢?因为完整的操作无法完成,这似乎很有道理。您的另一个选择是将完成栏移回到仅创建用户,并将确认电子邮件留作可选操作。在这种情况下,发送一个带有关于是否发送电子邮件的其他信息的200。 - Rubix Rechvin
1
问题的核心在于混合了RESTful资源创建和RPC风格的操作。在RESTful世界中,用户的创建将是原子操作,并返回201或422(或您选择的任何错误代码)。然后,发送确认电子邮件可能是另一个POST到/api/user/confirmationemailtask,然后启动电子邮件过程。当您将两者结合起来时,您会发现存在歧义的地方。 - Edgar
@edgar 很明显。谢谢。 - csi
1个回答

5
问题的核心在于将RESTful资源创建和RPC风格的操作混合在一起。在RESTful世界中,用户的创建应该是原子操作,并返回201或422(或您选择的任何错误代码)。然后发送确认电子邮件可能是另一个POST到/api/user/confirmationemailtask,然后启动电子邮件过程。当你把这两个组合起来时,你就会发现模糊的地方。

1
但是,如果发送确认电子邮件是另一个POST到/api/user/confirmationemailtask,然后启动电子邮件过程,那么它是否仍应向进行POST请求的人返回某些内容?那个东西还应该返回https状态码吗?那个代码应该是什么? - Henry Yang
1
原始的创建用户POST应该在正文有效负载中返回新创建用户的ID(或具有链接的HTTP端点)(假设成功使用201)。 可选地,它还可以返回与用户创建相关联的任何作业的ID(例如,发送电子邮件,提供数据库等)。 然后,客户端可以查询每个作业ID的状态,或查询主用户端点,可能会获取每个作业及其关联状态的列表。 设计有许多选项。 - Edgar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接