最佳答案
我有一组资源,它们的表示是懒惰地创建的。构建这些表示的计算可能需要几毫秒到几个小时,具体取决于服务器负载、特定资源和月相。
为资源接收的第一个 GET 请求启动服务器上的计算。如果计算在几秒钟内完成,则返回计算的表示形式。否则,将返回202个“ Accepted”状态代码,客户端必须轮询资源,直到最终表示可用。
这种行为的原因如下: 如果结果在几秒钟内可用,则需要尽快检索它; 否则,何时可用并不重要。
由于有限的内存和大量的请求,NIO 和长轮询都不是一个选项(也就是说。我无法保持足够的连接打开,甚至无法在内存中容纳所有的请求; 一旦“几秒钟”过去,我将持久化多余的请求)。同样,客户机限制也是这样,它们不能处理完成回调。最后,请注意,我对创建一个 POST 到的“工厂”资源不感兴趣,因为额外的往返意味着我们失败的分段实时约束超出了预期(此外,这是额外的复杂性; 而且,这是一个从缓存中受益的资源)。
我想在返回202个“已接受”状态代码以响应 GET 请求的问题上存在一些争议,因为我从未在实践中见过它,它最直观的用法是响应不安全的方法,但我从未发现任何特别令人沮丧的东西。此外,难道我不能同时保持安全性和无效性吗?
那么,大家对这种方法有什么看法?
编辑 : 我应该提到的是,这是针对所谓的业务 web API 的,而不是针对浏览器的。