【问题标题】:REST. Subresource of Non-Existent Resource [duplicate]休息。不存在资源的子资源 [重复]
【发布时间】:2016-05-01 10:42:53
【问题描述】:

我有以下 API:

api/guests/

api/guests/{id}/

api/guests/{id}/bookings

假设,我想获得不存在的客人的预订(意思是,传递了错误的 id)

我应该返回404 错误代码还是只返回一个空数组?

第一个选项似乎更安静,但是这种操作通常需要 2 个 DB 调用(第一个 - 用于通过guest_id 检索预订,第二个 - 检查客人是否存在)

那么,我应该选择哪个选项?

【问题讨论】:

  • 恕我直言,正确性远比针对数据库触发的一个附加查询重要得多。

标签: rest http http-error


【解决方案1】:

这取决于您选择的语义。

恕我直言,返回 404 表示特定资源存在 - 这与“存在但未给出子资源”不同。

另一件事是您如何定义不存在 - 您的意思是有效但不存在的 id 或格式错误(字符串而不是数字等)?

为了简单起见,我总是更喜欢返回一个空的项目集合,格式错误的 id 通常在模型绑定期间进行验证,因此我确信可以获取正确的数据。

【讨论】:

    【解决方案2】:

    你如何区分这两种情况:

    1. 客人不存在
    2. 客人没有预订

    恕我直言,第一个应该用 404 通知,而在第二种情况下你应该返回一个空数组。无论是否需要两次调用数据库,您都可以稍后优化数据库访问。此外,考虑性能的设计(即赋予性能 w.r.t.“正确性”的特权)可能会带来“过早的优化”。

    【讨论】:

      猜你喜欢
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 2014-10-25
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      相关资源
      最近更新 更多