目前,我们的团队正在进行讨论,我会对其他观点感兴趣。假设我们有一个RESTful Web服务,其作用是通过应用各种分析算法和服务来注释文档。基本的交互很清楚:我们有一个资源,即文档集合;客户端将新文档发布到集合中,获取新文档的URI,然后可以获取该docURI
以获取该文档,或者可以获取GETt_code以查看常规元数据,命名实体的{docURI}/metadata
等。问题是某些分析可能需要很长时间才能完成。假设客户端在分析完成之前获取元数据URI,因为客户端希望能够在UI中显示部分或增量结果。将来重复执行GET可能会产生更多结果。
我们讨论的解决方案包括:
直到完成所有分析(
似乎不可扩展)
{docURI}/ne
和content-length
标头以获取增量内容(但我们事先不知道多久
最终的内容将是
每个资源都有一个Atom提要,因此
客户端订阅更新
事件,而不是简单地获取
资源(似乎过多
如果有很多活动文档,则可能很复杂,甚至可能会占用资源)
当时可用的一切(但仍然
留下客户的问题
知道我们何时最终完成)[编辑后,删除了对幂等性的引用]。
对于在RESTful架构中处理长期或异步交互的替代方法有任何意见或建议吗?
伊恩
最佳答案
我将通过以下方式实现它:
1)客户端请求元数据
2)服务器返回实际数据(如果已经可用)或NotReady标记
3)客户端询问服务器何时有可用数据(此步骤可以与之前的步骤合并)
4)服务器返回时间间隔(执行的作业总数可能有启发式,等等)
5)客户等待指定的时间,然后转到步骤1
这样,您可以尽快向客户端提供数据。您可以通过调整在步骤4返回的延迟间隔来调整服务器负载