【问题标题】:What HTTP status code to use when reporting service status through RESTful API?通过 RESTful API 报告服务状态时使用什么 HTTP 状态代码?
【发布时间】:2015-09-18 12:47:08
【问题描述】:

我正在创建一个 RESTful API,它允许客户端检查当前是否正在运行特定服务。 编辑:请求地址看起来像这样 - /services/123/running

可能的返回值是:

  1. OK (HTTP 200)- 服务存在并且正在运行
  2. 未运行 (HTTP ???) - 服务存在,但未运行
  3. 未找到 (HTTP 404) - 服务不存在

应该使用什么 HTTP 状态码来通知客户端该服务确实存在,但目前没有运行?

编辑:经过更多研究,我发现了一个关于同一主题的 stackoverflow 讨论 – What is the appropriate HTTP status code response for a general unsuccessful request (not an error)?

【问题讨论】:

    标签: rest http http-status-codes


    【解决方案1】:

    您不想为此使用 HTTP 状态代码。它们将表明请求是如何进行的。

    相反,您应该在响应正文中传递状态。如果请求(检查服务状态)正常,那么 HTTP 状态码应该始终为 200,唯一不同的应该是正文。

    例子:

    服务存在并正在运行

    Status code 200 Ok
    Body {"status": "exists and running"}
    

    服务存在,但没有运行

    Status code 200 Ok
    Body {"status": "exists, not running"}
    

    服务不存在

    Status code 200 Ok
    Body {"status": "doesn't exist"}
    

    【讨论】:

    • 这确实是解决这个问题的一种方法!同时,这似乎是一个有很多争论的话题——是在 HTTP 200 中报告 REST 答案中的错误还是使用 HTTP 状态代码:)
    • 错误代码让您清楚地知道发生了什么。您不希望通过解析状态字符串来找出相同的结果。如果您只是向用户吐出消息,这是可以接受的,但如果您想务实地执行操作,那么这不是一个好方法。 REST 客户端可能假设请求成功执行,但实际上没有发生任何事情,因为服务没有运行/不存在。
    • @Liam 在这种情况下的服务不应与处理请求的实际 api 混淆
    • 我可能以有点令人费解的方式描述了这种情况,但@TimCastelijns 说对了——REST 服务用于通知客户他们可用的服务(在数据库中描述)以及是否目前有特定服务可用/正在运行。
    猜你喜欢
    • 2011-09-03
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2017-05-12
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多