Web services RESTAPI错误返回良好实践
我正在寻找有关从RESTAPI返回错误的良好实践的指导。我正在开发一个新的API,所以我现在可以向任何方向发展。目前我的内容类型是XML,但我计划将来支持JSON 我现在添加了一些错误案例,例如,一个客户端试图添加一个新的资源,但已超过其存储配额。我已经在用HTTP状态码处理某些错误案例(401用于身份验证,403用于授权,404用于普通错误请求URI)。我查看了受欢迎的HTTP错误代码,但400-417范围中似乎没有一个报告特定于应用程序的错误。因此,一开始我试图用200OK和一个特定的XML负载返回我的应用程序错误(即,多付我们钱,你就会得到你需要的存储!),但我停下来想了想,这似乎是索比(恐惧地耸耸肩)。此外,我感觉我正在将错误响应分为不同的情况,因为有些是http状态代码驱动的,有些是内容驱动的 那么,行业建议是什么?好的实践(请解释原因!),还有,从客户机的角度来看,RESTAPI中什么样的错误处理使客户机代码更容易使用 因此,一开始我试图用200OK和一个特定的XML负载返回我的应用程序错误(即,多付我们钱,你就会得到你需要的存储!),但我停下来想了想,这似乎是索比(恐惧地耸耸肩) 除非这个请求真的没有问题,否则我不会退还200英镑。From,200表示“请求已成功” 如果超过了客户端的存储配额(无论出于何种原因),我将返回403(禁止): 服务器理解该请求,但拒绝满足该请求。授权没有帮助,请求不应重复。如果请求方法不是HEAD,并且服务器希望公开请求未得到满足的原因,那么它应该在实体中描述拒绝的原因。如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到) 这会告诉客户机请求是正常的,但它失败了(这是200不能做到的)。这也让您有机会在响应主体中解释问题(及其解决方案)Web services RESTAPI错误返回良好实践,web-services,http,rest,Web Services,Http,Rest,我正在寻找有关从RESTAPI返回错误的良好实践的指导。我正在开发一个新的API,所以我现在可以向任何方向发展。目前我的内容类型是XML,但我计划将来支持JSON 我现在添加了一些错误案例,例如,一个客户端试图添加一个新的资源,但已超过其存储配额。我已经在用HTTP状态码处理某些错误案例(401用于身份验证,403用于授权,404用于普通错误请求URI)。我查看了受欢迎的HTTP错误代码,但400-417范围中似乎没有一个报告特定于应用程序的错误。因此,一开始我试图用200OK和一个特定的XML
您还考虑了哪些其他特定的错误情况?主要的选择是是否将HTTP状态代码视为REST API的一部分 两种方法都很好。严格来说,我同意REST的一个想法是,您应该使用HTTP状态代码作为API的一部分(成功操作返回200或201,根据各种错误情况返回4xx或5xx)。但是,没有REST。你可以做你想做的事。我已经看到更多的非RESTAPI被称为“RESTful” 此时(2015年8月),我建议您将HTTP状态代码作为API的一部分。使用框架时,现在比过去更容易看到返回代码。特别是,现在比过去更容易看到非200返回案例和非200响应主体 HTTP状态代码是api的一部分
请记住,有比HTTP/1.1 RFCs中定义的更多的状态代码,IANA注册表位于。对于您提到的情况,状态代码507听起来不错。有两种错误。应用程序错误和HTTP错误。HTTP错误只是为了让AJAX处理程序知道一切正常,不应用于其他任何用途
5xx
服务器错误
2xx成功
然而,如何设计应用程序错误实际上取决于您。例如,堆栈溢出发送具有
响应
、数据
和消息
属性的对象。我认为响应包含true
或false
以指示操作是否成功(通常用于写操作)。数据包含有效负载(通常用于读取操作),消息包含任何附加元数据或有用消息(例如当响应为false
时的错误消息)。不要忘记5xx错误以及应用程序错误
在这种情况下,409(冲突)如何?这假设用户可以通过删除存储的资源来解决问题
否则为507(非耳鼻喉科)
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 )
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)