5

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

有一个关于 $filter 没有结果时它应该如何表现的问题?

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

有什么想法/理由吗?我偏向于返回一个空集合,但这会违反推荐的做法吗?

4

3 回答 3

5

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

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

于 2013-01-11T08:14:30.310 回答
2

坚持OData 规范 3.0

9.1.1。200 OK 响应代码

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

9.2.1。404 未找到响应代码

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

甚至在OData 规范 4.0中更精确

9.1.1 响应码 200 OK

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

9.2.1 响应码404 Not Found 404 Not Found表示请求URL指定的资源不存在。响应主体可以提供附加信息。

于 2016-10-24T14:23:49.040 回答
1

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

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

于 2013-01-13T17:38:15.710 回答