我有另一个团队连接到的端点。该端点返回与团队无关的响应。它只在乎他们的输入是否到达我们。但是之后,我们必须做很多处理。当前,我们只是接受请求并响应如何处理这种情况。下面是示例代码。
@POST
public Response perform(Request request){
//do something here that takes some time.
return Response.status(Httpstatus.OK).build();
}
即使处理一直在进行,确保响应返回给调用方的最佳方法是什么?我考虑过异步,但想检查是否有更好的方法。
答案 0 :(得分:2)
返回
202已接受
该请求已被接受进行处理,但是处理尚未完成。该请求最终可能会执行,也可能不会最终执行,因为在实际进行处理时可能会不允许该请求。无法通过这样的异步操作重新发送状态代码。
202响应是有意拒绝的。其目的是允许服务器接受对其他进程的请求(也许是每天仅运行一次的面向批处理的进程),而无需用户代理与服务器的连接一直持续到该进程完成为止。随此响应返回的实体应包括请求当前状态的指示,以及指向状态监视器的指针或用户何时可以期望完成请求的一些估计。
包括一个可在其中获得结果的链接。
@POST
public Response perform(Request request){
//TODO attach the request to an asynch background job
//pseudo code!
return Response.status(ACCEPTED)
.location(/* URI where the result will be accessible*/)
.build();
}