Javascript 如果用户试图删除未找到的记录,服务器应该返回200还是404?

Javascript 如果用户试图删除未找到的记录,服务器应该返回200还是404?,javascript,node.js,rest,api,error-handling,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.stat

我的同事在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


正确的实现方式是什么?

您将获得404。根据HTTP标准。如果您正在以没有记录的id搜索记录;然后服务器将无法匹配指定URI处的目标


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

200代码表示请求的操作已成功完成,因此在删除后收到200代码的用户将假定该记录确实存在并已被删除。404表示找不到端点

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


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

看看这里,404将是正确的响应。JSON api规范建议,如果您在成功响应中没有返回任何内容(您没有),则返回404,如果删除请求成功并且根据上面链接的规范没有返回任何内容,则服务器必须返回204无内容状态代码:p-因此,具有讽刺意味的是,404是正确的响应,但200不是:p