让我们说有一个带订单的产品.如果您要求/ products/product_id,如果product_id不存在,它将返回404.但是,如果此产品没有订单或者它应该返回一个空数组,/ products/product_id/orders应返回404吗?
Dar*_*ler 48
我会返回一个空集合.零订单产品是一个完全有效的概念,因此空订单收集的存在比404推断该产品没有订单收集更有意义.
你真的应该只做两件事中的一件
要么返回一个200 (OK)状态代码,并在正文中返回一个空数组。
或返回204 (NO CONTENT)状态代码和 NO 响应正文。
对我来说,选项 2 在技术上似乎更正确,并且符合 REST 和 HTTP 原则。
但是,选项 1 对客户端来说似乎更有效 - 因为客户端不需要额外的逻辑来区分两个(成功)状态代码。因为它知道它总是会收到一个数组,所以它只需要检查它是否没有、一个或多个项目并适当地处理它
不要返回数组。在任何情况下都返回一个对象,例如
{
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