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

时间:2016-01-25 07:31:05

标签: rest http http-error

我有以下API:

api/guests/

api/guests/{id}/

api/guests/{id}/bookings

假设,我想预订不存在的客人(意思是,传递错误的身份证)

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

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

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

2 个答案:

答案 0 :(得分:2)

您如何区分这两种情况:

  1. 客人不存在
  2. 客人没有预订
  3. imho,第一个应该通过404通知,而在第二个情况下你应该返回一个空数组。无论是否需要两次调用DB,您都可以随时优化数据库访问。此外,考虑到绩效的设计(即赋予表现特权和正确性")可能会带来过早的优化"。

答案 1 :(得分:0)

这取决于您将选择的语义。

IMHO返回404表示特定资源不存在 - 这与"存在但不存在子资源"。

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

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