RESTful API是否应该为对象数组返回404?

dB.*_*dB. 37 api rest

让我们说有一个带订单的产品.如果您要求/ products/product_id,如果product_id不存在,它将返回404.但是,如果此产品没有订单或者它应该返回一个空数组,/ products/product_id/orders应返回404吗?

Dar*_*ler 48

我会返回一个空集合.零订单产品是一个完全有效的概念,因此空订单收集的存在比404推断该产品没有订单收集更有意义.

  • + 1,我们走了这条路,我对这个决定感到满意. (2认同)
  • 除了返回空集合之外,或者代替返回空集合,您还可以使用 204 状态代码(“无内容”),它有点像 404,但由于它处于 200 年代,因此并不意味着用户/客户端犯了一个错误(即输错了 URL 或其他内容)。 (2认同)
  • @MatrixFrog返回204的问题是,如果用户执行搜索并且返回一些值,然后又执行另一个不返回值的搜索,则用户代理不应在204之后更新用户界面。因此,用户会认为他们再次收到了相同的结果。 (2认同)

Vih*_*ung 6

你真的应该只做两件事中的一件

要么返回一个200 (OK)状态代码,并在正文中返回一个空数组。

或返回204 (NO CONTENT)状态代码和 NO 响应正文。

对我来说,选项 2 在技术上似乎更正确,并且符合 REST 和 HTTP 原则。

但是,选项 1 对客户端来说似乎更有效 - 因为客户端不需要额外的逻辑来区分两个(成功)状态代码。因为它知道它总是会收到一个数组,所以它只需要检查它是否没有、一个或多个项目并适当地处理它


Iva*_*ave 5

不要返回数组。在任何情况下都返回一个对象,例如

{ 
   offset: 30,
   limit: 10,       
   arr: []
}
Run Code Online (Sandbox Code Playgroud)

它允许您添加元数据(用于分页或其他)

通常使用 http 状态代码:200

此外,这是由安全问题驱动的传统 Web API 行为:https : //www.owasp.org/index.php/OWASP_AJAX_Security_Guidelines#Always_return_JSON_with_an_Object_on_the_outside