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