我正在实现一个web服务的用户注册。
当有人想注册帐户时,我的ws会发送一个激活链接到他/她的邮件。在单击该链接之前,用户帐户未被激活(但信息保存在数据库中,因此存在资源)。
所以我的问题是,如果你多次注册同一邮件,你会得到409冲突代码。但有两种情况:
用户帐户待确认
用户已注册并激活
我想知道什么是正确的方法。我应该“发明”一个http状态4xx来区分它们,还是用带有信息的json发送409?其他解决方案?
谢谢!
编辑:
我发现了这个响应->https://stackoverflow.com/a/3290369/1171280其中piskvor建议使用409 status和request header来解释失败的原因和/或body。哪一个?头球?尸体?两者都有?
你怎么认为?
编辑2:
http status+body加上详细的错误(甚至包括机器可解析代码)是可以的,twitter可以这样做(https://dev.twitter.com/docs/error-codes-responses)并且尊重:)。但我仍然怀疑403对409…:秒
最佳答案
挂起帐户是用户帐户的一种特殊类型,因此我认为在您的问题上下文中,这两个帐户(已注册和挂起)是相同的。在这两种情况下你都应该返回409。对于其余的API,都是相同的情况,因为该资源已经存在于系统中。
关于您更新的问题,我建议使用body(json)发送错误,而不是使用自定义http头来解释调用失败的原因。原因是,在body中可以有多个错误消息(每个错误消息都是单独的json对象/数组元素),而在header中只能有一个错误消息(尽管可以根据某些字符进行拆分)。另一个原因是,您可以有一个通用的错误处理方法,它在json中查找“error”对象,而不是为每个失败场景查找不同的自定义头。
HTTP codes:
403-服务器理解请求,但拒绝执行。授权没有帮助,请求不应该是
重复的。
409-由于与资源的当前状态冲突,无法完成请求。此代码只允许在
期望用户能够解决的情况
冲突并重新提交请求。
我认为应该是409,因为冲突可以通过使用不同的电子邮件地址重新发出请求来解决。