我们正在设计一个公共 API,并试图通过以下案例找出 GET 的最佳实践:
路径参数:
/orders/{orderId}
发现:200 个带有响应正文。
未找到:404。
查询参数:
/Products/{productId}/orders?color={color}
找到的订单:200 个,带响应正文。
未找到:在这种情况下应该是 200 还是 204 甚至 404?
我认为应该是200或204,因为本例中找到了资源,并且查询参数只是执行过滤效果。但在这种情况下我们应该返回 200 还是 204?
假设
(1) 第一个 URL 仅针对一个订单。
(2) 第二个 URL 用于 0 个或更多订单的列表。
第一个响应中缺少订单应该是 404, 因为非订单不是订单。
第二个响应中缺少的订单应该是 200,,因为空列表仍然是列表。
在您的查询参数网址 (/Products/{productId}/orders?color={color}) 中,客户端可以区分客户端提供的 ProductId 不存在和 ProductId 存在但没有任何订单,这将很有帮助“颜色”的颜色。
如果未找到productId,则应返回404。如果找到了productId,但没有订单,则带有空列表的200可以准确地描述这种情况。不要使用 204,因为 204 用于指示实际上有一个空响应,并且您返回一个空列表 []。