HTTP服务API错误消息最佳实践

时间:2015-01-31 06:22:53

标签: rest asp.net-web-api

对于调用某些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. 肯定需要修复的潜在安全风险

1 个答案:

答案 0 :(得分:1)

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

另一个注意事项是您在响应有效负载中使用状态代码和statusmessage。我认为你不需要复制它,因为它已经存在于响应中。

我会建议一条错误信息:

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

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

希望它有所帮助。 亨利