4

根据https://labs.omniti.com/labs/jsend

  • Fail:当API调用由于无效数据或调用条件而被拒绝时
  • 错误:当 API 调用因服务器错误而失败时

这是否可以解释为 4xx 错误(例如 404)应该总是返回一个 Fail,但 5xx 错误总是对应于一个错误?

4

1 回答 1

6

这是一个很好的问题,我将根据我自己的经验举一个具体的例子来回答它。在我的一个项目的 API 中,我允许上传 Excel 电子表格,该电子表格经过处理并将生成的 JSON 存储在服务器上。

如果将数据保存到磁盘时出错,那么我会响应一个 JSend“错误”以及相应的错误消息,因为应该能够保存数据。

另一方面,如果其中一行中的数据无效(可能是不正确的数据类型或范围错误),那么我知道电子表格中不正确的确切行(或行)。在这种情况下,“失败”响应是合适的data,因为 JSend 响应的属性将包含每个不可处理行的所有行的列表(行号和错误消息)。

在“错误”响应的情况下,我将没有这种能力,因为我将被限制在一个message属性上。但是对于“失败”响应,我有data可用的属性,我可以用细粒度的问题列表来响应。

因此,虽然没有错误,但数据本身不正确,用户应该返回并查看他们的电子表格并修复data“失败”响应中属性识别的问题。

从 HTTP 错误的角度考虑这一点,虽然是一个有趣的练习,但并不总是会产生精确的映射(4xx = 失败,5xx = 错误)。它更多地是关于您想与客户端交流的内容:发生了不应该发生的坏事(“错误”)或服务器工作正常但您的数据不完全符合标准(“失败”)。

最后,您是否还想使用 HTTP 错误完全取决于您。你总是可以用 200 回应,让 JSend 来说话。但这是一个稍微不同(而且有点宗教)的讨论。:-)

我希望这会有所帮助。

于 2019-06-04T19:32:22.327 回答