在REST服务上返回错误消息的最佳方法?

时间:2009-07-03 00:25:29

标签: rest

我一直在查看REST API的示例,例如Netflix http://developer.netflix.com/docs/REST_API_Reference#0_59705和Twitter,它们似乎将错误消息放在statusText标头响应中而不是responseText中。我们正在开发一个内部RESTful api,我正在争论发送自定义statusText消息并忽略responseText。

对于我们的应用程序的范围,当用户尝试做他们不应该做的事情时,我们返回错误400,并且将在用户界面中为用户更新的唯一错误消息400我相信这条消息应该作为一个经过修改的statusText发送,但是其中一位工程师(他对REST的了解比我更少)正在争论在responseText中发送它。

最好的方法是什么?

5 个答案:

答案 0 :(得分:10)

HTTP定义您应该在响应实体主体中添加描述性错误消息,即responseText。

任何客户端都不会呈现或处理statusText。

我将使用状态文本作为错误消息类型,即400客户端错误,并使用正文来描述可以呈现给用户的问题,无论客户端可以处理的格式如何。

编辑:请注意,从那时起,存在一种新的标准化格式,以标准方式将错误详细信息传递回客户端,您可以在https://tools.ietf.org/html/rfc7807找到该建议,我建议这样做。

答案 1 :(得分:9)

我认为你是对的,一般方法是使用HTTP中内置的现有错误机制。

通常,尝试将您的错误映射到现有的HTTP错误,例如,如果他们请求他们没有权限的内容,则返回403错误。

如果他们要求不存在的内容,请返回404。

  • 亚历

答案 2 :(得分:1)

根据HTTP规范(rfc2616):“HTTP状态代码是可扩展的”

但是,我不认为为每个不同的错误消息创建新状态是正确的方法:

我会说适当选择HTTP状态(HTTP Status Code Definitions)如果找不到符合您要求的任何类别创建自定义类别(但我相信你会)并在HTTP响应中放入错误消息体。

答案 3 :(得分:0)

为您的回复选择适当的状态代码非常重要,因为它是自我描述性消息的关键推动因素。

实体主体应该是资源状态的表示,理想情况下包含应用程序中可用的下一个状态的超链接

答案 4 :(得分:0)

Http状态代码非常自我解释,应该这样使用。返回200 OK和验证错误是相当肥皂和误导。任何REST客户端实现4xx和5xx错误都会进入错误块,如果您真的想要将响应正文用于非2xx响应,那么它实际上取决于具体情况。