相关疑难解决方法(0)

空表的正确REST响应?

比方说,你想通过调用来获得用户的列表getapi/users,但目前该表已被截断,所以没有用户.什么是这种情况下适当的反应404还是204

api rest http

95
推荐指数
5
解决办法
3万
查看次数

HTTP 200或404是否为空列表?

我知道这是一个相当普遍的问题,但我没有找到满足我的答案.

我一直在使用django rest框架一段时间了,但除了给出的例子之外,这几乎是无关紧要的.它的默认行为是在访问具有空列表项的路由时返回带有空列表资源的HTTP 200.例如:如果我们有一个路径,例如/articles/访问文章列表,但它不包含任何项目,我们会收到如下json的响应:

{"count":0, "next":null, "previous":null, "items": []}
Run Code Online (Sandbox Code Playgroud)

这完全没问题.我们在/ articles /中找到了我们要查找的资源,它恰好没有任何项目.

如果我们访问路线/articles/?page=1,我们会得到完全相同的响应.

到现在为止还挺好.现在我们尝试访问/articles/?page=2,响应代码也会发生变化.现在得到一个404好像无法找到资源的错误消息,说该页面不包含任何结果.哪个是与?page = 1相同的情况......

我对这种行为非常满意,但今天我开始质疑这个设计.是怎样的?page=1情况不同于?page=2?而且,在发出HEAD请求时,如何判断请求是否"有效"?在包含任何结果的意义上有效.

这在过滤列表检查某个字段的可用性(例如,发出HEAD请求/users/?username=ted)的情况下可能很有用.

  • 200响应显然意味着理解请求并找到了项目.
  • 404意味着请求被理解,但在该位置/ URI没有找到任何项目(AFAIK查询参数也是URI的一部分)
  • 如果无法理解请求,则返回400语法错误,并返回422语义错误.

这是一个很好的设计吗?为什么大多数人似乎不同意它,它有什么缺点?

rest http http-status-codes

10
推荐指数
1
解决办法
6771
查看次数

标签 统计

http ×2

rest ×2

api ×1

http-status-codes ×1