错误请求类型的适当状态代码

Appropriate Status Code for Incorrect Requested Type

如果您有一个 REST API 可用于访问唯一的所有者,然后访问一只已注册的宠物 - 哪种状态代码最适合表示宠物存在但未找到目前URL?

/Owner/{id} -- 获取访问所有者对象的操作(其中包括对任何复杂嵌套对象的引用。

/Owner/{id}/Dog -- 获取访问狗的操作。

/Owner/{id}/Cat -- Get操作访问一个Cat.

如果请求的主人有一只狗,应该/Owner/{id}/Cat return什么样的回应?

感觉这应该 return 某种引用说有一只宠物,它将调用者指向 /Owner/{id}/Dog

我不认为 404 是正确的,因为它不会使 API 很容易被发现(与 5xx 状态代码一样),尽管 2xx 状态代码似乎没有给我我想要的两者都想要,3xx 状态代码似乎推断出基础设施发生了变化,而不是在不同的位置找到了资源。

[编辑:发布这个问题后不久,我发现了 303 - See Other 状态代码。这是更好的方法吗?]

在这种情况下,您认为 return 的最佳状态码是什么?


一些背景

  1. 这是我想要实现的一个通用示例 - 实际上我是 storing/accessing 身份验证信息(即 OAuth2、PAT 等),这些信息太不同了,无法压缩到一个平面对象上许多与其他类型无关的字段。
  2. 代码生成非常重要 - 这个 API 是通过内部微服务提供的,它只能通过 GraphQL 端点(充当 API网关)。这使得具有 return 多种不同类型的单个端点相对不受欢迎(即 owner/{id}/pet 根据您碰巧拥有的类型 return 要么是狗,要么是猫,要么是鱼).

    • 也就是说,如果提供多个​​不同的端点而不是一个端点不是您执行此操作的方式,我对其他选项持开放态度(显然考虑了此列表中的第 1 点)。
  3. 最好,如果可能的话,我希望它与 Swagger 兼容。

在发布这个问题后,我发现了 303 - See Other 状态代码,在这种情况下似乎是合适的。

P.S。我已经用这些信息更新了问题,并将保留该问题,因为我仍然有兴趣了解其他人是否有更合适的解决方案 and/or 最佳实践。