RESTful API-批量操作的分块响应



我使用一个类似REST的API,它将支持对某些资源的批量操作。由于完成这样的请求可能需要一些时间,我希望在分块响应中返回操作的状态。媒体类型应为JSON。如何使用JAX-RS?

(我知道有StreamingOutput,但它需要手动序列化数据。)

Chunked Transfer编码通常用于发送方开始传输数据时内容长度未知的情况。接收器可以处理每个块,而服务器仍在生成新的块。这意味着服务器一直在发送。我认为分块发送I'm still working|I'm still working|I'm still working|没有太大意义,而且据我所知,分块传输编码是由大多数应用程序服务器透明处理的。当响应大于某个大小时,它们会自动切换。

用例的一个常见模式如下:

客户端触发批量操作:

POST /batch-jobs HTTP/1.1

服务器创建一个描述作业状态的资源,并在Location标头中返回URI:

HTTP/1.1 202 Accepted
Location: /batch-jobs/stats/4711

客户端检查此资源并接收200:

GET /batch-jobs/stats/4711 HTTP/1.1

这个示例使用JSON,但您也可以返回纯文本或添加缓存头,告诉客户端应该等待下一次轮询多长时间。

HTTP/1.1 200 OK
Content-Type: application/json
{ "status" : "running", "nextAttempt" : "3000ms" }

如果作业完成,服务器应该用303和他创建的资源的URI回答:

HTTP/1.1 303 See other
Location: /batch-jobs/4711

最新更新