不正确的请求类型的适当状态代码

时间:2018-01-09 04:34:36

标签: rest model-view-controller polymorphism swagger http-status-codes

如果你有一个REST API可用于访问一个唯一的所有者,然后是一个注册的宠物 - 哪种状态代码最适合表示Pet存在,但在当前URL中找不到?

google_id - 获取访问所有者对象的操作(包括对任何复杂嵌套对象的引用。

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

/Owner/{id}/Dog - 获取操作以访问Cat。

如果请求的所有者有狗,那么应该/Owner/{id}/Cat返回什么样的回复?

感觉这应该返回某种引用,表示有一个Pet,它将调用者指向/Owner/{id}/Cat

我不认为404是正确的,因为它没有使API非常容易发现(同样具有5xx状态代码),尽管没有2xx状态代码似乎能给我我想要的东西,3xx状态代码似乎推断基础设施的变化,而不是在不同的位置找到资源。

[编辑:发布此问题后不久,我发现了/Owner/{id}/Dog状态代码。这会是更好的方式吗?]

您认为在这种情况下返回的最佳状态代码是什么?

对于某些背景

  1. 这是我想要实现的一个通用示例 - 实际上我实际上是存储/访问身份验证信息(即OAuth2,PAT等),这些信息太过不同而无法压缩到平面对象上而没有很多字段不会与其他类型相关。
  2. 代码生成非常重要 - 此API通过内部微服务提供,该服务只能通过GraphQL端点(充当API网关)访问。这使得单个端点返回多个不同类型(即303 - See Other,根据您拥有的类型返回Dog,Cat或Fish)相对不合需要。

    • 话虽如此,如果提供多个​​不同的端点而不是一个端点不是你要这样做的方式,我会接受其他选择(显然考虑到这个列表中的第1点)。
  3. 最好,如果可能的话,我希望这是符合Swagger的。

1 个答案:

答案 0 :(得分:0)

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

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