web-services - REST APi错误返回有好的做法

  显示原文与译文双语对照的内容

我在寻找关于从 REST API 返回错误的好实践指南。 我正在开发一个新的API,所以我现在可以任意方向。 目前我的内容类型是 XML,但我计划在未来支持 JSON 。

我现在添加了一些错误案例,比如一个客户端试图添加一个新的资源,但超过了他的存储配额。 我已经使用HTTP状态代码( 401用于身份验证,403代表授权,404代表普通错误请求 uri ) 处理某些错误案例。 我查看了幸运的HTTP错误代码,但是 400 -417范围中没有一个看起来可以报告应用程序特定的错误。 所以开始我想用 200确定返回我的应用程序错误和一个特定的XML负载( IE 。 给我们更多的钱,你会得到你需要的存储空间但是我停下来思考它,它似乎是肥皂(/shrug 中的) 。 另外,好像我把错误响应分成了不同的情况,因为一些是http状态代码驱动的,另一些是内容驱动的。

那么推荐的是什么? 好的实践( 请解释原因) 和也,从客户的观点,什么样的错误处理的REST API 使生活更容易为客户机代码? !

时间:

有两种错误。 应用程序错误和HTTP错误。 HTTP错误只是为了让你的AJAX处理程序知道一切正常,并且不应该用于其他任何事情。

5xx 服务器错误


500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported
506 Variant Also Negotiates (RFC 2295 )
507 Insufficient Storage (WebDAV) (RFC 4918 )
509 Bandwidth Limit Exceeded (Apache bw/limited extension)
510 Not Extended (RFC 2774 )

2xx成功


200 OK
201 Created
202 Accepted
203 Non-Authoritative Information (since HTTP/1.1)
204 No Content
205 Reset Content
206 Partial Content
207 Multi-Status (WebDAV)

但是,如何设计应用程序错误取决于你。 堆栈溢出例如用 responsedatamessage 属性发送一个对象。 我认为响应包含 true 或者 false,以表明操作是否成功( 通常用于写操作) 。 数据包含负载( 通常用于读取操作),消息包含任何额外的元数据或者有用的消息( 当 responsefalse 时出错) 。

...