Rest 休息不存在资源的子资源

Rest 休息不存在资源的子资源,rest,http,http-error,Rest,Http,Http Error,我有以下API: api/guests/ api/guests/{id}/ api/guests/{id}/bookings 假设,我想得到不存在的客人的预订(意思是,传递错误的id) 我应该返回404错误代码还是只返回一个空数组 第一个选项似乎更为restful,但是此类操作通常需要2个DB调用(第一个-用于通过guest\u id检索预订,第二个-检查guest是否存在) 那么,我应该选择哪个选项呢?这取决于您将选择的语义 IMHO返回404表示特定资源不存在,这与“存在但未提供子资源”不同

我有以下API:

api/guests/

api/guests/{id}/

api/guests/{id}/bookings

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

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

第一个选项似乎更为restful,但是此类操作通常需要2个DB调用(第一个-用于通过
guest\u id
检索预订,第二个-检查guest是否存在)


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

这取决于您将选择的语义

IMHO返回404表示特定资源不存在,这与“存在但未提供子资源”不同

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


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

如何区分这两种情况:

  • 客人不存在
  • 客人没有预订

  • imho,第一个应该用404通知,而在第二个情况下,应该返回一个空数组。无论需要对数据库进行两次调用,您都可以在以后优化数据库访问。此外,考虑性能的设计(即授予性能特权w.r.t.“正确性”)可能会导致“过早优化”。

    IMHO正确性远比针对数据库的一个额外查询重要得多。