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