尝试删除数据库中不再存在的条目时,后端服务最合适的HTTP响应是什么?

时间:2019-05-29 10:34:32

标签: http backend

我的团队正在开发一种简单的后端服务,该服务为操作ADDGETREMOVE提供了一个非常简单的项目。所有这些都是由http请求触发的,除了从数据库中添加,获取和删除项目外,它们并没有太多作用。

对于在数据库中不存在的项目(例如,之前已删除)上触发REMOVE操作的特定场景,我们的问题是服务的响应是什么? 在2XX和4XX等可能性中,我们一直在辩论诸如200 + some specific message410 - resource gone之类的选项,但是我们尚未达成共识。

我希望这不是Bikeshedding

谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  

服务的响应应该是什么?

重要的是要强调status codes是为了表示服务器试图理解并满足客户请求的结果。话虽如此,2xx状态代码在这种情况下不合适,应避免使用

  

状态代码2xx(成功)类别表示已成功接收,理解并接受了客户的请求。

最合适的状态代码应在4xx范围内:

  

状态代码的4xx(客户端错误)类表明客户端似乎已经出错。除非响应HEAD请求,否则服务器应发送表示形式,其中包含错误情况的说明以及错误情况是暂时的还是永久的情况。

404状态代码似乎正是您想要的,因为它表明服务器找不到所需的资源:

  

6.5.4. 404 Not Found

     

404(未找到)状态码表示原始服务器未找到目标资源的当前表示或不愿意透露该资源的存在。 404状态代码不表示这种缺乏表示是暂时的还是永久的; [...]

如果您担心客户端如何理解404响应,则可以向他们提供有效载荷,以表明此类资源不再可用。


请记住,ADDREMOVE不是标准的HTTP方法。希望这是一个错字,并且您正在使用POST(或PUT)和DELETE来表示对资源的操作。