【问题标题】:Returning errors in Web API : error integer codes or error strings?在 Web API 中返回错误:错误整数代码或错误字符串?
【发布时间】:2017-07-05 06:37:40
【问题描述】:

我有一个关于在 Web API 中返回错误的问题。此 Web API 通常从 javascript(网站)调用。 返回错误有两种可能,一种是作为字符串返回,另一种是作为整数错误码返回。

将错误作为错误代码返回的 JSON 示例:

{
    "status" : "Error",
    "error"  : 30
}

以错误字符串形式返回错误的 JSON 示例:

{
    "status" : "Error",
    "error"  : "ERR_INVALID_FILENAME"
}

您认为最好的方法是什么?我认为错误字符串选择更好,因为以下原因:

  • 错误字符串选项通过引入自注释代码提高了代码的可读性和可维护性。 因为,在错误代码方法中,javascript 开发人员会写:

    if (result.error == 30) { do something related to files and invalidness...}

    在错误字符串方法中,javascript 开发人员会写:

    if (result.error == "ERR_INVALID_FILENAME") { do something related to files and invalidness...}

  • 在浏览器渲染、HTML dom 操作和 AJAX HTTP 请求处理的宏伟计划中,这个小小的错误字符串检查是微不足道的开销。虽然在 C++ 或 C# 应用程序中我们显然会使用枚举,但我们在 web api 和网站等两个独立实体中没有这样的选择,而且成本回报似乎是合理的。

感谢您的意见。

【问题讨论】:

  • 我同意你的说法,但这个问题可能更适合软件工程社区。​​span>
  • @Itay 你找到解决方案了吗?
  • @JoseFrancis 只有两种意见,我希望这个问题有更多的答案。最近几天我想到的一个额外的额外输入是,在 API 中,错误(即使它们在 JSON 化时被字符串化)应该驻留在枚举中并且应该是强类型的(以便可以签入编译时间)。

标签: javascript json api asp.net-web-api error-handling


【解决方案1】:
  1. 我对多个请求有相同的错误消息,也许您可​​以为错误枚举、字典甚至列表使用某种结构(如果您需要多语言)。
  2. 您可以使用某种翻译器从错误代码到消息(甚至类型、级别)。在很多情况下,您需要的不仅仅是一条消息:也许您会有一条友好的消息和一条调试消息,也许您需要某种类型来表示这是一条阻塞消息,而这只是一条警告。

    1234563 (再次取决于)但您的客户端将努力做到这一点。迁移到 js 时请注意浏览器内存限制。

【讨论】:

    【解决方案2】:

    要回答“字符串或整数错误代码”的问题,字符串选项更可取且足够好在代码角度,除了 处理错误和在 JS 中显示正确的消息可以不计入成本或间接费用

    作为一项改进,我建议您可以发送适当的 HTTP 状态代码,例如 200 for success and 400 for bad request 等,以便在整个应用程序中通用。

    如果您希望客户端应用程序检测来自 API 的特定错误,您可以在 HttpResponseMessage() 的“数据部分”中包含包含错误状态和代码的模型,这样您就不必始终检查错误代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-21
      • 2020-01-28
      • 2018-10-22
      • 2013-02-19
      • 1970-01-01
      • 2015-10-01
      • 2013-12-17
      • 1970-01-01
      相关资源
      最近更新 更多