REST API接口设计时,HTTP状态码204与404的区别

在设计REST API接口时遇到这个问题,当请求的数据在数据库中不存在时,究竟应该返回204还是404状态码?

204表示No Content,直接翻译过来是内容不存在,好像也可以表示请求的数据在数据库中不存在的意思。实际上,No Content是针对返回报文的内容而言,表示报文中只有报文头中有内容,报文体中没有内容。这适合于这样一种情形:客户端向服务器提交一些无需服务器返回数据的请求,此时服务器成功执行请求后仅给客户端返回一个报文头,报文头中包含一些任务执行状态信息。

而404表示Not Found,直接翻译过来是没有找到,与数据库中查不到所请求的资源意思吻合。

进一步地,我们再来辨析一下,2xx是服务器正确执行的意思,4xx是客户端错误请求的意思。比较如下三种情况:

  • GET /users/{userId}/albums/{albumId} 请求用户某个专辑,如果albumId对应的专辑不存在,这是一种错误请求(请求不存在的资源),使用404状态码更合适
  • GET /users/{userId}/albums 请求用户的专辑列表,如果该用户未收藏任何专辑,则应该返回一个空列表,这是正确执行并正确返回,使用200状态码比使用204更合适,因为报文体并不空,有一个空列表。
  • DELETE /users/{userId}/albums/{albumId} 请求删除用户某个专辑,如果数据库中存在该专辑,成功删除后应该返回204,若数据库原本就不存在该专辑,则应该返回404.

通过这个案例,相信大家对200/204/404的适用场景比较清楚了。

你可能感兴趣的:(实用技能,restful)