RESTful API:当没有任何东西可以返回时该怎么办

时间:2015-12-08 22:10:46

标签: rest asp.net-web-api

根据我对RESTful API的理解:

  • 如果我要求的ID不存在(例如@interface { NSMutableArray *socailArray; } //inside connectionDidFinishLoading socailArray = [dataDict valueForKey:@"socail"]; ,其中用户999不存在),则应返回/users/999/posts状态代码。

  • 如果我要求使用有效ID的对象列表,但没有任何内容可以返回,则应返回带有空数组的404状态代码(例如200其中用户999存在但从未发布任何内容)

我在这里看到的问题通常是关于这两个案例。

现在我的问题是当我没有数据时,我正在使用有效的ID,但我应该返回一个对象而不是列表。

例如,我们假设由于某种原因,当我要求/users/999/posts时,我不想总是返回用户的地址。我有这个不同的路由:/users/999返回一个地址对象。

如果该用户没有任何地址,应该返回什么?空对象/users/999/address{}状态代码? 404状态代码?

我认为一个空对象是一致的吗?

谷歌搜索,我发现this 话说:

  

对于给定的召唤者ID,返回联盟或团队的调用现在将返回404而不是空对象。当所请求的资源(即联盟或团队)不存在时,此行为是正确的RESTful行为。

所以我对适当的RESTful行为应该是什么感到困惑。

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为404应该来自请求不存在的地址。实际上,如果地址资源不存在,并且客户端要求它(由于对资源状态的错误了解),客户端就会出错。

关于发现给定用户是否具有关联地址的观点,我将根据HATEOAS约束的指示,通过使用超媒体控制从客户端资源到地址资源来明确表示关系。 / p>

此外,地址资源是一个弱实体w.r.t.对应的用户。因此,为这两种情况返回404是有意义的。您仍然可以利用HTTP实体主体来更好地解释发生的情况。

答案 1 :(得分:0)

从消费者的角度考虑,他们宁愿在没有地址时使用相同的代码,还是必须为没有地址编写特殊情况?

我返回一个空集合,因为它对消费者的工作较少(对于REST服务,但这是一个奖励)。

如果请求为/users/999/addresses且用户999不存在,我会返回404

编辑:如果/ users / 999 / address是资源的规范地址(也就是说/ users / 999 / address / 1不正确)那么我会返回404,因为用户要求具体而精确的事情。