Rest中的错误处理

Rest中的错误处理,rest,http-status-codes,restful-architecture,Rest,Http Status Codes,Restful Architecture,有许多方法可以处理RESTful api中的错误。由于系统需求和领域策略,有时需要简化解决方案。 堆栈溢出是使用自己的api对所有错误使用http状态代码400进行简化,然后将自己的错误代码嵌入响应中 这是一个遵循REST模式的解决方案,但可能还有其他优势。我能想到的一个优点是,响应中的错误代码可以比只使用http协议中可用的错误更加系统特定。使用Stackoverflow模式处理REST错误还有其他好处吗?我认为您必须利用HTTP状态代码通知REST客户端,如果处理成功,如果发生错误,但这对应

有许多方法可以处理RESTful api中的错误。由于系统需求和领域策略,有时需要简化解决方案。 堆栈溢出是使用自己的api对所有错误使用http状态代码400进行简化,然后将自己的错误代码嵌入响应中


这是一个遵循REST模式的解决方案,但可能还有其他优势。我能想到的一个优点是,响应中的错误代码可以比只使用http协议中可用的错误更加系统特定。使用Stackoverflow模式处理REST错误还有其他好处吗?

我认为您必须利用HTTP状态代码通知REST客户端,如果处理成功,如果发生错误,但这对应于高级提示,会发生什么

您通常需要关联一个错误负载,该负载提供了对错误的最详细描述,以及一些结构化的内容,以便编程REST客户机能够理解和处理这些错误。您可以自由选择这种有效载荷的结构

以下是我通常使用的JSON格式,但它没有链接到特定格式:

{
  errors: [
    {
      "message": "my message",
      "code": "ERR12",
    },
    {
      "message": "my message",
      "code": "ERR13",
      "field": "fieldName"
    }
  ]
}
有些错误可能是一般性的,但也会链接到请求表示的特定字段

此外,我认为我们可以利用其他4xx代码,因为代码400有点通用。以下是一些可以使用的方法:

400:通知请求不正确的一般性错误 405:如果您尝试使用资源不支持的HTTP方法 409:乐观锁定错误 412:如果在执行资源方法的处理之前先决条件失败 415:如果提供的表示的格式不正确或请求的媒体类型不受支持 422:验证输入表示时出错。虽然它来自WebDAV,但您可以使用它,例如GithubAPI。 您可以注意到,这些方法405、415中的一些本机由REST框架(例如Restlet)支持

在Restlet的上下文中,可以按照以下答案中所述进行错误管理:。即使没有这个框架,这也可以为您的实现提供一些提示

希望有帮助, 蒂埃里