根据我对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行为应该是什么感到困惑。
谢谢!
答案 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,因为用户要求具体而精确的事情。