设计REST ful ODATA API,如何在结果集为空时执行操作? 404或{}?

时间:2013-01-11 06:59:25

标签: asp.net-web-api odata

我正在使用ASP.NET WebAPI构建符合ODATA的API?

有一个问题,当$ filter没有结果时它应该如何表现?

它应该返回一个空集合吗?或发送HTTP 404响应?

任何想法/推理?我偏向于返回一个空集合,但它会违反建议的做法吗?

3 个答案:

答案 0 :(得分:5)

鉴于您没有直接在特定的已知Request-Uri(例如/ resource / {uid})处理单个资源,您的集合也是已知的可寻址Request-Uri(例如/ resource那么404就不合适了。

如果我在使用您的API,我会期待一个空集合。

答案 1 :(得分:2)

坚持OData specifications 3.0

9.1.1。 200 OK响应代码

如果操作成功完成,GET,PUT,MERGE或PATCH请求可以返回200 OK。在这种情况下,响应正文必须包含请求网址中指定的实体或属性的值

9.2.1。 404未找到响应代码

如果请求URL指定的实体或集合不存在,则服务应该以404 Not Found和空响应正文响应。

OData specifications 4.0

中更精确

9.1.1响应代码200确定

如果成功完成并且资源的值不为空,则不创建资源的请求将返回200 OK。在这种情况下,响应主体必须包含请求URL中指定的资源的值。

9.2.1找不到响应代码404 404 Not Found表示请求URL指定的资源不存在。响应机构可以提供其他信息。

答案 2 :(得分:1)

我不认为应该使用HTTP 404。该代码用于指示对不存在的资源的引用。

HTTP代码204(没有内容)可能是404的更好选择。但是空集合是一个更好的主意,因为它可以更容易地使用API​​。