REST API的错误响应

时间:2018-04-03 20:32:25

标签: json spring rest

以下是我的API返回给客户端的错误响应:

{
    "statusCode": "400",
    "errors": [
         {
             "errorCode": "50009",
             "fieldName": "bookingDate",
             "errorMsg": "Input bookingDate must lie in the bracket: 20 Jan - 27 Jan, 2018"
         }
     ]
}

客户端无法在UI中显示API返回的errorMsg,但它需要括号信息,即(2018年1月20日至2018年1月27日),同时形成更多含义errorMsg。因此,客户端必须从API响应中提取括号信息。

但是,如果更改了errorMsg的文本,这可能会破坏客户端的功能。 所以,为了让客户的生活更轻松,我想稍微改变一下错误响应:

{
    "statusCode": "400",
    "errors": [
         {
             "errorCode": "50009",
             "fieldName": "bookingDate",
             "errorMsg": "Input bookingDate must lie in the bracket: 20 Jan - 27 Jan, 2018",
             "startDate": "20 Jan 2018",
             "endDate": "27 Jan 2018"
         }
     ]
}

那么,将startDate和endDate添加到错误响应中是否正确(仅为了客户的利益)还是有其他更好的方法吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您想要添加到错误响应中的任何信息都是免费的。如果你对你真的有用,没有理由不这样做。 Facebook这样做。另一方面,我会尽量不会出错。

在HTTP错误代码的标准定义的帮助下,设计良好且分离的REST API 意味着大多数错误原因,这些定义仍应在API文档中记录。鉴于此,客户端的开发人员只能通过解析错误状态来了解确切的错误。

这也意味着客户开发人员需要立即检查他能做什么,而不向后端发送任何请求。例如,如果给定的日期范围有效。

说明这一点,如果无法使用返回的错误代码来确定请求的确切问题,那么API接口的设计可能不是最佳的。

虽然REST只是一个概念,但实现完美的RESTfull API几乎是不可能的,因此总有例外,恕我直言。

答案 1 :(得分:1)

虽然这个问题倾向于吸引基于意见的答案,但我会尝试提供一些可能有用的提示。

您的API似乎验证了用户输入。由于各种原因(例如,没有可解析的日期,过去的日期等),该输入可能是无效的。这永远不能仅通过HTTP状态代码反映出来,因此,正如您所做的那样,返回HTTP 400 验证错误消息是一种很好的做法。

此验证错误消息应该是人类可读的,客户端应该可以将其显示给用户。如果包含字段名称(在您的示例中),客户端甚至可以突出显示关联的输入字段并在其旁边显示错误消息。

如果您的API的消费者不是UI,而是某种自动化服务,那么与错误相关的技术字段可能更符合您的需求。 (这就是意见发挥作用的地方:许多人说API应该与消费客户类型无关)。但我认为在您的情况下,您应该调查客户端无法显示git push origin --delete branch_name 的原因 - 这应该是将来添加其他验证的最佳和最灵活的方式。