对于客户端(浏览器中的JS)与服务器通信的一些API设计,我处在一个十字路口。由于有效的安全锁定,我们使用HTTP 409冲突来表示操作失败。安全锁可以防止开发人员意外更改我们客户的生产系统。我的任务是在客户端上更优雅地处理409s,以指示为什么特定的API调用失败。
我的解决方案是包装我们的任何AJAX调用的失败处理程序,当由于409导致某些操作失败时,它将在客户端上显示通知-一切都很好,并且可以与使用相同机制的其他4XX和5XX错误一起使用。
出现问题时,我们的一个路由处理程序在遇到业务逻辑错误时以409s响应-我的AJAX包装器报告安全锁已打开,而客户端的现有故障处理程序报告了(它认为)问题是基于主体的回应。一个简单的解决方案是更改处理程序的响应或用于表示安全锁的状态代码。
这使我走到了十字路口:HTTP状态代码是否应该甚至用来表示业务逻辑错误?这个问题解决了我面临的同一问题,但是并没有获得太大的吸引力。正如链接答案中所建议的那样,我倾向于使用HTTP 200 OK以及适当的正文来表示业务逻辑中的失败。
有人在这里有什么强烈的意见吗?有谁能说服我这是代表失败的错误方式?
400 Bad Request
因为一揽子HTTP代码似乎最好将业务逻辑错误作为一个类来涵盖。
400 Bad Request
在数据丢失或无法读取/解析时使用。也就是说,请求数据本身在某种程度上是不好的。
400 Bad Request
。分离的原因是因为您对全球标准的偏离可能会使将来的系统,开发人员或文档阅读者感到困惑。