如何处理 REST 中的异步操作
我需要了解在REST中处理异步操作的方法是什么,以及它们的优点和缺点是什么。我发现的一些方法:
-
基于资源:其中,操作的状态建模为状态。用户进行异步 REST 调用(PUT、POST 等)获取或响应 ()。此外,通过 GET 重复轮询状态 URI,以检查操作执行的状态/进度/消息。
Accepted
In-Progress
202
问题:此资源应在服务器上处于活动状态多长时间?如果客户端在操作完成之间的时间间隔内进行大轮询,我们如何返回状态?似乎保留执行状态会起作用。但是,何时存档/删除,坚持多长时间,这是一种标准方法吗?
-
基于回调:需要异步请求具有回调 URI 的位置。请求以异步方式处理,并在完成后调用具有操作状态/结果的回调 URI。
问题:这似乎更优雅,并且服务器端涉及的开销更少。但是如何处理回调服务器间歇性停机、无响应等情况呢?实现典型的重试,其中回调 URI 也提供重试配置?这种方法还有其他缺点吗?
-
Servlet 3.0 异步支持:其中 HTTP 客户机与 Java Servlet 建立连接,Java Servlet 在显式关闭之前一直保持打开状态,直到关闭的客户机和服务器可以通过它进行异步通信。
问题:由于其Servlet 3.0规范,我认为Spring REST实现的Jersey目前还没有使用这种方法。是否有任何特定的REST实现利用类似的方法或指针来实现它的方法?
还有其他方法,也许是商业方法?