如果用户尝试删除未找到的记录,服务器是否应返回200或404?

时间:2017-02-10 00:57:19

标签: javascript node.js rest api error-handling

我的同事在我们的API中开发了一个如下所示的约定:

...
  return Subscription.destroy({
    where: {
      id: req.params.id
    }
  }).then((count) => {
    if (count === 0) {
      Logger.log('warn', '- subscriptionController.delete : no record found')
      return res.status(404).json(['No record found.'])
    }
    Logger.log('info', '- subscriptionController.delete')
    return res.status(200).end()
...

基本原理是:如果没有找到记录,那么这是一个无效的请求,因为用户试图删除记录并且没有发生。

在我看来,即使没有删除记录,也应返回200,只要提供给控制器的ID是有效ID即可。

正确的实施是什么?

2 个答案:

答案 0 :(得分:0)

你会得到404.根据HTTP标准。如果您正在搜索没有记录的ID的记录;那么服务器将无法匹配指定URI的目标。

W3C http status codes

答案 1 :(得分:0)

通常,如果找不到要返回或修改的资源,API应该返回404.但是,这可能会误导用户认为端点本身无效。

200代码意味着请求的操作成功完成,因此在删除后接收200的用户将认为该记录确实存在并被删除。 404意味着无法找到端点。

如果api调用类似/api/record/1234,那么我建议返回404,因为uri不存在。

如果api调用类似于/api/record?id=1234,那么我建议返回403或500错误,并显示一条消息,指出该记录不存在。这样用户就知道/api/record是一个有效的端点。