2012-07-09 49 views
2

我正在为基于YUI的客户端的分页数据检索设计一个REST API。 其余的URL看起来像这样的一个GET请求:分页结果上的REST状态代码204

/app/catalog/data?startIndex=<int>&results=<int>&sort=<sting>&dir=<string> 

所有参数都是可选的,即如果没有给定参数,从数据库的所有数据将被倾倒。 现在说数据库中只有1000条记录。继reqeust由:

/app/catalog/data?startIndex=1100&results=25 

我应该返回什么状态代码,如果从数据库中分页结果仍然为空,虽然要求是罚款?我无法决定这是204还是404

生成的媒体类型是JSON和CSV。

回答

7

我会说204是最合适的。要求是成功的,只是没有结果。

10.2.5 204 No Content 

The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. 

听起来很像这种情况。

+0

在这种情况下,“404”会有什么区别?无效的排序列将是一个'错误的请求'。 – 2012-07-09 20:08:25

+0

@ Michael-O无效的排序列将是一个“错误的请求”,因为它只是一个无效的选项。然而,在这种情况下,这是一个完全有效的请求,它恰好没有任何返回值。此外,将来,请求可能会返回一个值,而无效排序列永远不会如此。 – 2012-07-09 23:20:10

+0

所以,我会坚持204这似乎是在这种情况下最好的解决方案。谢谢。 – 2012-07-10 11:19:19

1

你通常会返回什么格式的结果?我倾向于使这204甚至200返回一个空的列表。

+0

JSON有效负载与结果以及YUI的元数据。如果有要求,它也可能返回'text/csv'。 – 2012-07-09 20:04:03

+0

如果元数据可以告诉人类发生了什么事情(请求的页面/切片是空的),我肯定会返回200空数据有效载荷。 – 2012-07-09 20:07:39

+0

不,它不能。这仅适用于M2M。人应该使用基于YUI的界面。 – 2012-07-09 20:09:32

7

我不能决定这是204还是404

都没有。只需返回空白结果200(空XML文档或JSON数组,无论您使用什么)。通常我使用带有分页视图的REST服务,以及结果页面,并返回总记录数。这将帮助客户意识到这个错误。但从技术上讲,这没有错。

使用204DELETE操作(确实没有内容可以返回)和PUT

BTW(粗体矿):

如果没有给出参数,从DB的所有数据都将被转储

相信,你不想这样做...

+0

根据RFC 204在GET上很好。为什么我应该返回200,如果我只有204这样的完美状态代码? 数据量不是很大,除了我的情况下输出格式也可以是CSV。 – 2012-07-09 20:07:13

+2

来自httpbis,这是IETF工作组正在进行的工作,以清除HTTP中的一些歧义:“204响应允许服务器指示操作已成功应用于目标资源,同时暗示用户代理不应该从当前的“文档视图”(如果有的话)中移走。“它不打算将视图更改为空集;它的目的是在不改变视图的情况下完成工作。见http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-19#section-7.2.5 – fumanchu 2012-07-10 05:57:40

+0

即将说出同样的事情,即“无论如何,只需返回200结果为空” 。这是正确的做法。请参阅https://stackoverflow.com/a/38659868/325521,了解为什么'204'不适用于每个RFC 7231规范。 '404'肯定是错误的,因为'404'是找不到资源的(即缺少资源,不存在但为空资源,这就是这种情况) – Shiva 2017-10-21 00:29:39