目前,我们的团队正在进行讨论,我会对其他观点感兴趣。假设我们有一个RESTful Web服务,其作用是通过应用各种分析算法和服务来注释文档。基本的交互很清楚:我们有一个资源,即文档集合;客户端将新文档发布到集合中,获取新文档的URI,然后可以获取该docURI以获取该文档,或者可以获取GETt_code以查看常规元数据,命名实体的{docURI}/metadata等。问题是某些分析可能需要很长时间才能完成。假设客户端在分析完成之前获取元数据URI,因为客户端希望能够在UI中显示部分或增量结果。将来重复执行GET可能会产生更多结果。

我们讨论的解决方案包括:

  • 保持HTTP连接打开
    直到完成所有分析(
    似乎不可扩展)
  • 使用{docURI}/necontent-length标头以获取增量内容(但
    我们事先不知道多久
    最终的内容将是
  • 提供
    每个资源都有一个Atom提要,因此
    客户端订阅更新
    事件,而不是简单地获取
    资源(似乎过多
    如果有很多活动文档,则可能很复杂,甚至可能会占用资源)
  • 只有GET返回
    当时可用的一切(但仍然
    留下客户的问题
    知道我们何时最终完成)[编辑后,删除了对幂等性的引用]。

  • 对于在RESTful架构中处理长期或异步交互的替代方法有任何意见或建议吗?

    伊恩

    最佳答案

    我将通过以下方式实现它:

    1)客户端请求元数据
    2)服务器返回实际数据(如果已经可用)或NotReady标记
    3)客户端询问服务器何时有可用数据(此步骤可以与之前的步骤合并)
    4)服务器返回时间间隔(执行的作业总数可能有启发式,等等)
    5)客户等待指定的时间,然后转到步骤1

    这样,您可以尽快向客户端提供数据。您可以通过调整在步骤4返回的延迟间隔来调整服务器负载

    10-07 19:16
    查看更多