REST GET的HTTP响应代码-未找到子资源(但未被标识符引用)

REST GET的HTTP响应代码-未找到子资源(但未被标识符引用),rest,http,null,response,Rest,Http,Null,Response,我正在构建一个RESTAPI,但在返回GET操作的响应代码时遇到了一个难题。 我在网上找到了很多例子和答案,但不是针对我的特定场景。 以下是我迄今为止所发现和理解的: 如果返回一个空列表(比如/library/authors/{authord}/books),一个响应代码为200的空列表就足够了 如果请求具有id的特定资源(例如/library/authors/{authorId}/books/{bookId}),响应将为空,并带有404 这总结了我的大多数用例,我对此很满意 但是,如果我在没有

我正在构建一个RESTAPI,但在返回GET操作的响应代码时遇到了一个难题。 我在网上找到了很多例子和答案,但不是针对我的特定场景。 以下是我迄今为止所发现和理解的:

  • 如果返回一个空列表(比如/library/authors/{authord}/books),一个响应代码为200的空列表就足够了

  • 如果请求具有id的特定资源(例如/library/authors/{authorId}/books/{bookId}),响应将为空,并带有404

  • 这总结了我的大多数用例,我对此很满意

    但是,如果我在没有id的情况下访问子资源,会发生什么

    例如,为了论证,假设作者可以有很多书,但只有一本自传。他要么有,要么没有。我不希望用户传入自动传记id,因为系统可以自行确定是否存在自动传记id,端点如下所示:

    GET/library/authors/{authord}/auto-biography

    如果作者存在但没有自传(为空),http响应代码是否为:

    • 204(空内容)
    • 404(资源不存在)

    提前谢谢你

    处理语义

    GET /library/authors/1/auto-biography
    
    /library/authors/1/auto-biography
    是一个标识符。它本身就是一些概念,比如“作者1的自传”;请注意,我们可以讨论资源,即使它实际上可能还不存在

    资源可以映射到空集合,空集合允许在概念的任何实现存在之前引用该概念

    出现在HTTP响应主体中的不是资源,而是资源的表示

    现在看看状态码

    404(未找到)状态代码表示源服务器未找到目标资源的当前表示形式,或者不愿意透露存在该表示形式

    204(无内容)状态代码表示服务器已成功完成请求,并且响应有效负载正文中没有要发送的其他内容

    一个松散的类比:假设您试图获取一个文件的内容
    404
    在语义上与FileNotFound对齐
    204
    表示文件长度为零字节

    404
    通常会伴随“一个包含错误情况解释的陈述,以及它是暂时的还是永久的情况。”它表示客户端试图使用一个不应该可用的链接

    另一方面,
    204
    没有任何内容——表示长度为零字节,怎么可能有数据。这是
    200
    响应的一个特例,通知客户机(和中间组件)响应正文故意留空