【发布时间】:2010-09-12 07:40:14
【问题描述】:
目前我们的团队正在进行讨论,我会对其他观点感兴趣。假设我们有一个 RESTful Web 服务,其作用是通过应用各种分析算法和服务来注释文档。清晰的基本交互:我们有一个资源,即文档集合;客户端向集合发布一个新文档,获取新文档的 URI,然后可以获取 docURI 以获取文档,或获取 {docURI}/metadata 以查看一般元数据,{docURI}/ne 用于命名实体等. 问题是有些分析可能需要很长时间才能完成。假设客户端在分析完成之前获取元数据 URI,因为它希望能够在 UI 中显示部分或增量结果。以后重复 GET 可能会产生更多结果。
我们讨论过的解决方案包括:
- 保持 HTTP 连接打开 直到所有分析完成(其中 似乎不可扩展)
- 使用
content-length和accept-range标题以获取增量内容(但 我们不知道提前多久 最终内容将是) - 提供 每个资源的 Atom 提要 客户端订阅更新 事件而不是简单的 GETting 资源(似乎过度 如果有许多活动文档,则复杂且可能需要大量资源)
- 只有 GET 返回 当时可用的任何东西(但它仍然 留下客户的问题 知道我们什么时候最终完成)[编辑以删除对 cmets 后幂等性的引用]。
对于在 RESTful 架构中处理长期或异步交互的替代方法有何意见或建议?
伊恩
【问题讨论】:
-
确实有两种解决方案。简单的解决方案:使用
GET,返回您当时拥有的任何元数据,如果仍在生成此数据,则将缓存生命周期标头设置为零。复杂的解决方案:使用 push 在生成元数据时将其发送给客户端...... imo 混乱,皮塔,不值得。使用GET。
标签: design-patterns architecture rest