正确的状态代码/说明将空集合作为Web响应返回

时间:2015-10-07 08:08:07

标签: asp.net-web-api

我有一个方法可以返回用户购买的所有商品,例如

http://myapihost/items/{user_id}

有些用户没有购买任何商品,因此商品将为items = [];

返回空集合时回答是否正确?

//pass empty array with 200 OK
Request.CreateResponse(HttpStatusCode.OK, items);

或者

//pass message with 200 OK
Request.CreateResponse(HttpStatusCode.OK, "No items were purchased by the user.");

传递string 200 OK的问题是,在将响应反序列化为List<Item>之前,最终用户将被迫进行另一次检查,因为通常200 OK返回List<Item>

或者

Request.CreateResponse(HttpStatusCode.NoContent, "No items were purchased by the user.");

RFC将NoContent定义为

  

服务器已完成请求但不需要返回实体主体,并且可能希望返回更新的元信息。

所以这种反应不正确,对吧?

或者

Request.CreateResponse(HttpStatusCode.NotFound, "No items were purchased by the user.");

RFC将NotFound定义为

  

服务器未找到与Request-URI匹配的任何内容。

所以这种反应也不正确,对吧?

或者还有其他回应吗?

1 个答案:

答案 0 :(得分:2)

发送空数组是2个原因的最佳选择

  1. 最终客户端总是期望一致的对象当然可以为null但客户端代码会更清晰

  2. 通过网络传输的数据对于空案例而言是最小的,而不是发送消息,因为客户端负责消息和显示消息的语言