让我们说有一个带订单的产品。如果您要求/ products / product_id,如果product_id不存在,它将返回404。但是,如果此产品没有订单或者它应该返回一个空数组,/ products / product_id / orders会返回404吗?
答案 0 :(得分:47)
我会返回一个空集合。零订单产品是一个完全有效的概念,因此空订单收集的存在比404推断该产品没有订单收集更有意义。
答案 1 :(得分:3)
不要返回数组。在任何情况下都会返回对象,例如
{
offset: 30,
limit: 10,
arr: []
}
它允许您添加元数据(分页或其他)
通常使用http状态代码:200
此外,这是传统的网络API行为,由安全关注点驱动: https://www.owasp.org/index.php/OWASP_AJAX_Security_Guidelines#Always_return_JSON_with_an_Object_on_the_outside
答案 2 :(得分:2)
你真的应该只做两件事
。返回200 (OK)
状态代码,并在正文中返回一个空数组。
或者返回204 (NO CONTENT)
状态代码和无响应正文。
对我而言,选项2似乎在技术上更正确并且与REST和HTTP原则保持一致。
但是,选项1似乎对客户端更有效 - 因为客户端不需要额外的逻辑来区分两个(成功)状态代码。因为它知道它总是会收到一个数组,所以它只需要检查它是否没有,一个或多个项目并进行适当的处理
答案 3 :(得分:0)
在我看来:
我们在这里谈论http状态值,并且应该提供更高级别的回复。
人们应该在代表层中看到这一点。就像当你的api无法回复请求时,如果api呼叫本身不可用,那么你可以用404回复。
但是当你的呼叫存在时,它可以回复一组数据,但它是一个空集合,你只能返回一个http 200,结果为空。
我会使用http状态值来指示请求验证,而不是直接使其依赖于更深层api层中的内容。
或者一个人可以严格遵守网上发现的协议,但是没有人遵循它们......