创建用户时,我们发送用户信息,在数据库中创建用户(现在用户具有uniqe id)并执行信用检查。
如果a)用户的信用评分高于某个数字,则一切都OK(201)。 b)如果不是,我们需要用户提供更多信息。
处理b的宁静方式是什么?
由于
答案 0 :(得分:2)
您仍然应该返回OK / HTTP状态200或Created / 201.据我了解您的问题,无论如何都会创建新用户,并且随后的信用检查可能会失败。但是服务器端和客户端都按预期工作。这是唯一重要的事情。如果客户端出现问题,您只能使用4xx,例如用户在数字字段中使用了字符串。您不能使用5xx,因为服务器端没有出错,例如您的信用卡服务有例外。您的信用服务失败的实际信息以及用户需要的更多信息应该包含在HTTP响应的正文中。
答案 1 :(得分:2)
在当前形式中,信用检查听起来更像是RPC操作而不是RESTful资源。虽然信用检查可能会调用某个银行的REST API,但由于查询而返回credit-worthy
,但这不是非常RESTful,包括检查用户创建过程(IMO)。
因此,b)在它不处理资源但执行类似RPC的操作(信用检查)的意义上并不是真正的RESTful。
你基本上有两个选择:
对于后者,您应该将信用检查与用户创建分开。在成功创建用户后,返回201(与您一样)以及客户端可用于执行下一个任务(HATEOAS)的其他链接。
由于信用检查本身并不是RESTful服务的真正好选择,因为它本身不是资源,而是更像RPC操作(已经注释过),你可能想要将这些代码重构为一个可能的Spring您注入这些需要信誉良好的用户的资源处理程序的托管服务bean。
您还可以提供资产负债表(/api/users/1234/balance
),用户可以查看其当前余额并获得用户可以用来进一步处理的行动(以链接形式)(例如向他的余额中添加更多资金)等等。)
如果是f.e.用户尝试访问/api/article/yxz
并且本文要求用户获得正余额,如果用户剩余资金不足,您可以返回402 Payment Required
。