假设我们只有30个产品和一个REST API,其中QueryString参数用于分页。在下面的示例中,pagesize
是每page
个资源的数量。
api/products?page=1pagesize=10
当请求在最大页面上请求页面时,您更喜欢回答什么?
api/products?page=125&pagesize=10
答案 0 :(得分:7)
我会选择 Not Found ,因为请求的语法非常好。 See the status code explanations
答案 1 :(得分:2)
所以我认为200,204和404中的任何一个都是有效的解决方案。
答案 2 :(得分:0)
在@PhilLab's answer之后,我已经使用404一段时间了,现在,我发现它有点不一致。
我的API具有默认的分页参数,因此
api/products
内部翻译成
api/products?page=1&pagesize=10
没有产品时,应该返回什么?
api/products
我发现为该URL返回一个404错误,就像它使用的URL不正确一样。
但是从技术上讲,请求超出范围,因此我发现在这种情况下(总页数= 0,第1页)返回200不一致,而不是在一般超出范围的情况下(totalpages = 1,第=页)不一致2)。它将“ 0元素”的大小写设为单数。
此处的要点是,对于超出范围的参数化请求使用404,对于超出范围的非参数化请求(使用默认值进行分页)使用200,则会在两个请求之间建立差异,而在代码中,未参数化的请求只会在传入时注入默认值,然后再平等对待。其他代码层不需要知道分页参数是默认注入的。
此外,如果200响应包含分页元数据,则与200相比,客户端获得的200包含的项或页面总数要多于普通404。
最后,从实际的角度来看,我还发现更容易(更少的代码)返回200。