我有两个资源用户和专辑。用户有一个专辑列表。获取专辑的方式有两个REST API。
user/{userId}/albums/{albumId}
通过专辑ID获取专辑。如果未找到则返回404user/{userId}/albums
通过用户ID获取所有专辑。在这种情况下,如果用户没有专辑,应该是状态码204还是404?
我有两个资源用户和专辑。用户有一个专辑列表。获取专辑的方式有两个REST API。
user/{userId}/albums/{albumId}
通过专辑ID获取专辑。如果未找到则返回404user/{userId}/albums
通过用户ID获取所有专辑。在这种情况下,如果用户没有专辑,应该是状态码204还是404?GET /user/xxx/albums
HTTP/1.1 200 OK
[]
以下是定义HTTP协议的RFC2616对状态码的说明:
在您的情况下,请求已成功,但没有相册可显示,因此您应该使用2xx类别中的状态。以下是RFC对204状态的说明:服务器已满足请求,但不需要返回实体主体,并可能希望返回更新的元信息。响应可以包括新的或更新的元信息,以实体标头的形式呈现,如果存在应与所请求的变体相关联。如果客户端是用户代理,则不应从导致发送请求的文档视图更改其文档视图。此响应主要旨在允许进行操作的输入而不会导致用户代理的活动文档视图发生更改,尽管任何新的或更新的元信息都应用于用户代理当前处于活动视图中的文档。204响应不得包括消息正文,因此始终在标题字段后的第一行为空行时终止。RFC指出,204主要旨在允许输入,因此您不应使用此选项。在这种情况下,我会使用200。The first digit of the Status-Code defines the class of response. The last two digits do not have any categorization role. There are 5 values for the first digit:
- 1xx: Informational - Request received, continuing process - 2xx: Success - The action was successfully received, understood, and accepted - 3xx: Redirection - Further action must be taken in order to complete the request - 4xx: Client Error - The request contains bad syntax or cannot be fulfilled - 5xx: Server Error - The server failed to fulfill an apparently valid request
当用户尝试访问一个已经失效或不存在的链接时,网站服务器通常会生成一个“404 Not Found”网页。
服务器已经满足了请求,但不需要返回实体主体。
显然您需要返回204状态码。如果使用404,则可能会使用户感到困扰。而且,仅当目标专辑不存在时才使用404。将1和2都使用404是不合适的。
当你请求一个特定的资源,比如一个用户,但该用户不存在时,应该返回404状态码。例如,你有一个API可以使用以下URL检索用户:
https://yourdomain.com/api/users/:userid
如果请求检索不存在的用户1234,则应返回404。在这种情况下,客户端请求了一个不存在的资源。
https://yourdomain.com/api/users/1234
404
现在假设你有一个API,该API使用以下URL返回系统中的所有用户:
https://yourdomain.com/api/users
让我来谈一下我的看法。希望你已经知道404与204之间的区别。
404状态码
404表示资源未找到或不存在,或URL无效。
例如:
GET : https://api.myapp.io/product/product_id_123
GET : https://api.myapp.io/image/nokia.jpg
如果单个产品/资源项目在数据库或资源文件夹中不存在,这意味着此URL的资源无效,因此我们必须抛出404错误。搜索引擎如Google和Bing将不会缓存结果,并且不会在第二天重试以获取新鲜内容。
204状态码
204表示URL有效,服务器已成功执行,但没有数据返回。
例如:
GET : https://api.myapp.io/product/search?keyword=nokia
如果在数据库中没有匹配关键词的数据(单个或多个)返回结果,则抛出 204 ,因为没有数据可返回,但 URL 仍然有效,搜索引擎(如 Google 和 Bing)将在第二天重新尝试获取新鲜内容,对于他们来说这不是无效的 URL,当您在第二天重试时可能会有一些数据与查询相匹配。
我同意回答,但我认为是204或200,这取决于您在专辑列表为空时的响应。
如果您将返回一个空数组,则使用200代码返回它,如果您不想返回任何内容,则正确的选择将是204。(我更喜欢使用带有空列表的200)
只有在资源不存在时才使用404,如果是空列表,请选择204或200。
祝你好运!