Rest 用我的HTTP状态代码传达原因

Rest 用我的HTTP状态代码传达原因,rest,Rest,在构建RESTful服务时,返回有效负载(Json)和HTTP状态代码(比如500403)是标准做法吗?我发现,有时仅状态代码还不足以满足调用应用程序的上下文要求。负载通常与响应代码一起返回,但它通常以通用方式解释响应代码本身。例如,如果web服务器向接受文本/html的客户机返回404,则每当需要此类响应时,它可能会提供一个html页面。可能会返回其他上下文信息(例如服务器版本、用于调试的日志标识符等),但不会指示更具体的原因 400错误系列意味着客户端可以对其进行操作。添加子错误代码会将客户

在构建RESTful服务时,返回有效负载(Json)和HTTP状态代码(比如500403)是标准做法吗?我发现,有时仅状态代码还不足以满足调用应用程序的上下文要求。

负载通常与响应代码一起返回,但它通常以通用方式解释响应代码本身。例如,如果web服务器向接受文本/html的客户机返回404,则每当需要此类响应时,它可能会提供一个html页面。可能会返回其他上下文信息(例如服务器版本、用于调试的日志标识符等),但不会指示更具体的原因


400错误系列意味着客户端可以对其进行操作。添加子错误代码会将客户端与服务器紧密耦合。

负载通常与响应代码一起返回,但它通常以通用方式解释响应代码本身。例如,如果web服务器向接受文本/html的客户机返回404,则每当需要此类响应时,它可能会提供一个html页面。可能会返回其他上下文信息(例如服务器版本、用于调试的日志标识符等),但不会指示更具体的原因


400错误系列意味着客户端可以对其进行操作。添加子错误代码将使您的客户端与服务器紧密耦合。

虽然这是一项正在进行的工作,但值得一读:

从规范中引用:

例如,考虑一个响应,指示客户端的BR> 帐户没有足够的信用。403禁止状态代码
可能被认为最适合使用,因为它将通知HTTP-

响应的一般语义

然而,这并没有给API客户端足够的关于 申请被禁止的原因、适用的账户余额或方式 来纠正这个问题。如果这些详细信息包含在
响应体为机器可读格式,客户端可以对其进行处理
适当地;例如,触发将更多信贷转移到 账户

本规范通过识别特定类型的
URI[RFC3986]存在问题(如“信用缺失”);HTTP API可以
为此,请在其控制下指定新的URI,或重新使用
现有的


虽然这是一部正在进行的作品,但值得一读:

从规范中引用:

例如,考虑一个响应,指示客户端的BR> 帐户没有足够的信用。403禁止状态代码
可能被认为最适合使用,因为它将通知HTTP-

响应的一般语义

然而,这并没有给API客户端足够的关于 申请被禁止的原因、适用的账户余额或方式 来纠正这个问题。如果这些详细信息包含在
响应体为机器可读格式,客户端可以对其进行处理
适当地;例如,触发将更多信贷转移到 账户

本规范通过识别特定类型的
URI[RFC3986]存在问题(如“信用缺失”);HTTP API可以
为此,请在其控制下指定新的URI,或重新使用
现有的


答案是:

  • 正确使用HTTP状态代码
  • 使用描述性错误消息
  • 考虑与其他语言相关的本地化
  • 允许发送多条消息
  • 如果应用程序需要,请包含其他错误代码
  • 使用字母作为状态代码
  • 包括到在线资源的链接
  • 支持多种媒体类型
  • 包括时间戳或日志引用
  • 包括HTTP状态代码
  • 不包括堆栈跟踪

  • 您可以在这里找到一个深入的答案:

    项目符号形式的答案是:

  • 正确使用HTTP状态代码
  • 使用描述性错误消息
  • 考虑与其他语言相关的本地化
  • 允许发送多条消息
  • 如果应用程序需要,请包含其他错误代码
  • 使用字母作为状态代码
  • 包括到在线资源的链接
  • 支持多种媒体类型
  • 包括时间戳或日志引用
  • 包括HTTP状态代码
  • 不包括堆栈跟踪

  • 你可以在这里找到一个深入的答案:

    我也发布了一个关于这个的问题

    最后,我了解了edit2中的内容:返回适当的HTTP状态,并在响应的主体中使用JSON描述遇到的错误,如:

    HTTP 404
    {
      "code": 123,
      "message": "The resource you are looking for does not exists"
    }
    

    这是其他人的工作方式。

    我也发布了一个关于这个的问题

    最后,我了解了edit2中的内容:返回适当的HTTP状态,并在响应的主体中使用JSON描述遇到的错误,如:

    HTTP 404
    {
      "code": 123,
      "message": "The resource you are looking for does not exists"
    }
    

    这是其他方法的工作方式。

    如果提供了一个错误就好了,因为401之类的状态代码很容易识别,但412代码或其他代码需要更多的解释。取决于文档,但在出现错误响应时返回标准JSON错误对象总是很好的。除了没有标准JSON错误对象之外。@JonathanW没关系,错误对象可以定制到我的应用程序。如果提供了错误就好了,因为401之类的状态代码很容易识别,但412代码或其他需要更多解释的代码。取决于文档,但在出现错误响应时返回标准JSON错误对象总是很好的