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

标签 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()
...

理由是:如果没有找到记录,那么这是一个无效的请求,因为用户尝试删除记录但没有发生。

在我看来,即使没有删除任何记录,只要提供给 Controller 的ID是有效的ID,就应该返回200。

正确的实现是什么?

最佳答案

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

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

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

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

关于javascript - 如果用户尝试删除未找到的记录,服务器应该返回 200 还是 404?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42149758/

相关文章:

JavaScript 原型(prototype)浏览器输出

node.js - 在Elasticsearch中使用nodejs创建索引时出错

javascript - 字符串不会使用正则表达式分割

javascript - 如何解决ajax数据编码中带有斜杠的查询字符串问题?

c# - 我应该如何在 Windows Phone 7 上使用 RestSharp 实现 ExecuteAsync?

Javascript UndoManager 浏览器支持

javascript - 将iOS滚动条编码为变通办法Bootstrap 4 Carousel错误:单击/点击会导致其他不必要的滑动

javascript - 如何在javascript中获取两个日期时间之间的时差?

node.js - 使用 Koa 启动文件下载

rest - Erlang/OTP架构: RESTful protocol for SOAish services