如果我的请求/确认/轮询失败,我应该使用什么HTTP响应

时间:2013-12-13 10:07:09

标签: asp.net asp.net-web-api

我有类似request/ack/poll的情景。所以客户发布数据,然后我发送状态接受。然后后台进程负责创建资源。

然后,客户端可以转到“已接受的响应”的位置并轮询状态。

如果后台进程失败并且我想告知客户端这个,我应该返回什么状态代码? HTTP 500并不是那么好,因为如果由于任何其他原因对状态路由的调用失败,也可能发生这种情况,并且客户端无法区分它。

而且,当资源创建仍在进行时,返回的最佳代码是什么? 200好吗?

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我定义了media type来解决此问题。这是自述文件的副本..


状态文档可能如下所示:

<status state="busy" progress="2/75" message="This is a message"/>

它由名为status的根节点组成,其属性包括:state,progress和message。

只需要state属性,并且应该是以下值之一:{waiting, busy, warning, error, ok, cancelled}

progress属性是一个分数,可以选择性地用于向用户指示我们期望资源在特定状态下保持多长时间。

message属性是一个人类可读的字符串,用于限定资源状态。

可以通过在状态节点中嵌入链接来提供附加信息。

<status state="ok" message="Finshed generating report">
    <link rel="related" href="http://example.org/report/99/output"/>
</status>

与此相当的JSON将是

{ "status" : {
        "state" : "ok",
        "message" : "Finished generating report",
        "links" : {
            "related" : { "href" : "http://example.org/report/99/output"}
        }
    }
}

JSON格式的链接对象的语法遵循HAL的约定,除了链接对象没有前导下划线。下划线是不必要的,因为这种媒体类型确实鼓励嵌入任意附加内容,因此不应发生命名冲突。

规范并未禁止对内容的扩展,但是它没有为基础JSON / XML格式的约束之外的扩展定义任何规则。

媒体类型标识符

目的是使用以下标识符将此规范作为提案提交给IANA进行注册:

  • 应用/状态+ xml的
  • 应用/状态+ JSON