如何标记REST中的资源需要更多信息

时间:2015-06-09 10:36:10

标签: java rest

创建用户时,我们发送用户信息,在数据库中创建用户(现在用户具有uniqe id)并执行信用检查。

如果a)用户的信用评分高于某个数字,则一切都OK(201)。    b)如果不是,我们需要用户提供更多信息。

处理b的宁静方式是什么?

由于

2 个答案:

答案 0 :(得分:2)

您仍然应该返回OK / HTTP状态200或Created / 201.据我了解您的问题,无论如何都会创建新用户,并且随后的信用检查可能会失败。但是服务器端和客户端都按预期工作。这是唯一重要的事情。如果客户端出现问题,您只能使用4xx,例如用户在数字字段中使用了字符串。您不能使用5xx,因为服务器端没有出错,例如您的信用卡服务有例外。您的信用服务失败的实际信息以及用户需要的更多信息应该包含在HTTP响应的正文中。

答案 1 :(得分:2)

在当前形式中,信用检查听起来更像是RPC操作而不是RESTful资源。虽然信用检查可能会调用某个银行的REST API,但由于查询而返回credit-worthy,但这不是非常RESTful,包括检查用户创建过程(IMO)。

因此,b)在它不处理资源但执行类似RPC的操作(信用检查)的意义上并不是真正的RESTful。

你基本上有两个选择:

  • 将整个过程定义为原子过程并将信用属性声明为强制性,并且仅当他的付款/信用/ ...选项可用并且正确检查时才创建用户(如果缺少某些内容或检查失败则返回400)
  • 将用户创建与信用检查分开

对于后者,您应该将信用检查与用户创建分开。在成功创建用户后,返回201(与您一样)以及客户端可用于执行下一个任务(HATEOAS)的其他链接。

由于信用检查本身并不是RESTful服务的真正好选择,因为它本身不是资源,而是更像RPC操作(已经注释过),你可能想要将这些代码重构为一个可能的Spring您注入这些需要信誉良好的用户的资源处理程序的托管服务bean。

您还可以提供资产负债表(/api/users/1234/balance),用户可以查看其当前余额并获得用户可以用来进一步处理的行动(以链接形式)(例如向他的余额中添加更多资金)等等。)

如果是f.e.用户尝试访问/api/article/yxz并且本文要求用户获得正余额,如果用户剩余资金不足,您可以返回402 Payment Required