根据https://labs.omniti.com/labs/jsend,
- 失败:当API调用由于无效数据或调用条件而被拒绝时
- 错误:当API调用由于服务器上的错误而失败时
这是否可以解释为4xx错误(如404(应始终返回Fail,但5xx错误始终对应Error?
这是一个很好的问题,我将根据自己的经验用一个具体的例子来回答。在我的一个项目的API中,我允许上传Excel电子表格,对其进行处理,并将生成的JSON存储在服务器上。
如果在将数据保存到磁盘时出错,那么我会用JSend"error"和相应的错误消息来响应,因为应该可以保存数据。
另一方面,如果其中一行中的数据无效(可能是不正确的数据类型或范围错误(,那么我知道电子表格中错误的确切行。在这种情况下,"失败"响应是合适的,因为JSend响应的data
属性将包含每个不可处理行的所有行的列表(行号和错误消息(。
在"错误"响应的情况下,我将没有这种能力,因为我将被限制为单个message
属性。但是对于"失败"响应,我有了data
属性,可以在其中使用细粒度的问题列表进行响应。
因此,虽然没有错误,但数据本身是不正确的,用户应该返回并查看他们的电子表格,并修复"失败"响应中data
属性确定的问题。
从HTTP错误的角度考虑这一点,尽管这是一个有趣的练习,但并不总是能得到准确的映射(4xx=失败,5xx=错误(。更多的是关于你想与客户端通信的内容:发生了不该发生的糟糕事情("错误"(,或者服务器运行良好,但你的数据不太符合标准("失败"(。
最后,是否也要使用HTTP错误完全取决于您自己。你总是可以用200来回应,然后让JSend来说话。但这是一个略有不同的(有点宗教色彩的(讨论
我希望这能有所帮助。