【问题标题】:HTTP service API error message best practiseHTTP 服务 API 错误消息最佳实践
【发布时间】:2015-01-31 06:22:53
【问题描述】:

调用一些HTTP Rest服务API报错,响应如下:

{
    "statusCode": "400",
    "error": "Bad Request",
    "message": "Can not construct instance of java.math.BigDecimal from String value 'a': not a valid representation\n at [Source: org.apache.cxf.transport.http.AbstractHTTPDestination$1@2f650e17; line: 1, column: 2] (through reference chain: com.foo.services.dto.request.ItemToUpdate[\"quantity\"])",
    "validation": {
        "source": "PAYLOAD",
        "keys": ["key"]
    },
    "errorIdentifiers": [],
}

我想知道响应中的message 字段是否合适。它确实向最终用户揭示了一定程度的实施。这算不算

  1. 没有什么特别的问题
  2. 只是一个糟糕的外观问题,不会造成严重问题,最终用户无法阅读
  3. 绝对需要修复的潜在安全风险

【问题讨论】:

  • 4.它确实揭示了有关实现的 TMI,但它可读并且没有特殊问题(您将一个字符作为“数量”传递,由于显而易见的原因这是无效的。
  • 也许 API 应该验证输入值并仅返回人类可读的错误消息,而不是实现细节(可能在调试模式下)。我会选择 3。查看更多讨论 here。我认为所有异常/错误都应该被记录下来,而不是向外界透露。

标签: rest asp.net-web-api


【解决方案1】:

我认为您应该只在服务器端记录堆栈跟踪。 IMO 它是技术提示(此外,最终用户可能甚至不使用 Java 与您的 API 进行交互),并且您的 API 的最终用户唯一感兴趣的是所提供的数据中存在验证错误。

另一个说明是您在响应负载中使用状态代码和状态消息。我认为您不需要复制它,因为它已经存在于响应中。

我会建议这样的错误消息:

{
    "messages": {
        "quantity": "this must be a valid number"
    }
}

我为字段 messages 使用 JSON 结构,因为在提供的数据中可能存在多个验证错误。请注意,这只是一个建议,您可以将其扩展到您的确切需求。

希望对您有所帮助。 蒂埃里

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2013-03-14
    • 2018-09-11
    • 2010-11-29
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    相关资源
    最近更新 更多