如何向客户端表示HTTP响应未完成



我有一个服务,它接受传入的请求,并在后台异步地完成它(返回一个202 Accepted状态码,表示它已经开始处理)。客户端可以通过向其资源发出GET请求来检查该请求的状态。

由于该请求是在后台处理的,因此客户端在任何时候检查它可能是不完整的(它的一部分可能丢失并且进程未完成)。有什么RESTful方式可以让我向客户机表示这一点吗?显然,我应该提供Cache-Control头,以防止客户端缓存此响应,因为它不是最终的。但是我要怎么做才能让客户知道,如果需要最新的信息,应该稍后再问一次。

参考:

客户端可以通过向其资源发出GET请求来检查该请求的状态。

Ifresult的异步后台进程是资源的创建。这对我来说意味着资源应该404,直到它准备好,在这一点上,它应该返回200

基于此,客户端可以通过检查状态码来发现进程未完成。

我想说你可能还想定义一个好的响应体(理想情况下使用application/problem+json),这样客户端就可以发现为什么是404。

处理这个问题的第二种方法是我通常喜欢的方法。我会创建一个单独的"状态"资源。它的功能是报告异步操作的状态,例如可以是pending,completefailed。我不知道对此有任何标准的HTTP响应格式,因此您可能需要为此定义一些JSON响应体。状态资源应该总是只返回200 OK,因为'status'总是可以找到的。

我使用400表示请求太早。很容易封装在指数回退重试机制中。

有其他的,但不是所有的客户端都可以处理,例如423锁定。

最新更新