例如,有一个宁静的API GET http://luexu.com/users/{page}
可以在第N页中列出用户。假设每个页面有20个用户。数据库中共有100个用户。 GET http://luexu.com/users/5
返回第80至100位用户。
那查询GET http://luexu.com/users/10
呢?占总用户数。哪种更好的设计返回空列表,空数组[]
或404
?
200?
{
"code": 200,
"msg": "OK",
"data": []
}
还是204?
{
"code": 204,
"msg": "OK",
"data": []
}
还是404?
{
"code": 404,
"msg": "Not Found",
"data": null
}
答案 0 :(得分:1)
那么代码204呢?
在HTTP中,204 No Content的含义非常具体-消息主体的长度为零字节。
204(无内容)状态码表示服务器已成功满足请求,并且响应有效内容正文中没有其他要发送的内容。
因此,如果要发送例如json编码的文档,则不要考虑它。
如果可以使用空列表表示资源,则可以使用200
作为响应代码。例如,请考虑将这个URI用于堆栈溢出本身。
截至2019年6月1日,带有这些标签的问题少于999页,但是服务器在计算该页面的正确表示形式时没有问题(包括编号最高的页面为426的信息)。因此,200
的语义非常合适。
404
表示该资源没有可用的表示形式。所有4xx
类响应代码都表明请求有错误-在这种情况下,它表明客户端对URI犯了错误。那可能是暂时的情况(您现在不应该询问该资源)。因此,如果您要指出的是客户端离开了域协议的愉快路径,那也可能很好。
如何选择?我从HTTP specification
的观察开始服务器应发送表示形式,其中包含错误情况的说明以及错误情况是暂时还是永久的情况。
那对客户有用的是什么?问题的表示形式还是空集合的表示形式?当将相同的资源用于不同的事物时,这可能是一个具有挑战性的问题。
答案 1 :(得分:0)
返回404并不适合您只有部分页面的情况(例如,您有85个用户),所以我会选择一个空列表,当您有一个二进制问题(无论是否有资源)时,404套件会更好。
我将研究以下类似问题: Rest service returns 404
答案 2 :(得分:0)
这是没有“最佳”答案的问题之一。
您所能做的就是查看选项,然后选择最适合您的方案的
。根据经验,我个人避免返回404。原因是不清楚为什么会收到404。可能会收到404,因为您的URL错误,因此,如果您设计了一个选择,则在返回404时返回404。没有数据,那么您最终将处于不清楚的情况。您怎么知道为什么得到404?这不好。
使用空数组返回200非常好。 返回204也很好。
重要的一点是做出选择,保持一致并记录选择,以便您的API用户知道您做出了选择,以及为什么这样做。
一致性和清晰度,为此目的。