我们目前正在我的团队中进行讨论,我会对其他观点感兴趣。假设我们有一个 RESTful Web 服务,其作用是通过应用各种分析算法和服务来注释文档。清晰的基本交互:我们有一个资源,即文档集合;客户端向集合发布一个新文档,获取新文档的 URI,然后可以 GETdocURI
以获取文档或 GET{docURI}/metadata
以查看一般元数据,{docURI}/ne
对于命名实体等。问题是一些分析可能需要很长时间才能完成。假设客户端在分析完成之前获取元数据 URI,因为它希望能够在 UI 中显示部分或增量结果。将来重复 GET 可能会产生更多结果。
我们讨论过的解决方案包括:
- 保持 HTTP 连接打开直到所有分析完成(这似乎不可扩展)
- 使用
content-length
andaccept-range
headers 获取增量内容(但我们事先不知道最终内容会持续多长时间) - 为每个资源提供一个 Atom 提要,以便客户端订阅更新事件而不是简单地获取资源(如果有许多活动文档,似乎过于复杂并且可能资源匮乏)
- 只是让 GET 返回当时可用的任何内容(但它仍然留下客户端知道我们何时完成的问题)[编辑以删除对幂等性的引用以下评论]。
对于在 RESTful 架构中处理长期或异步交互的替代方法有什么意见或建议?
伊恩