【发布时间】:2011-10-30 09:17:38
【问题描述】:
我正在设计一个 RESTful Web 服务,并试图提出一种处理项目集合的缓存和同步的好方法。我已经阅读过使用 Etag 和 If-None-Match 标头来优化单个资源的缓存,我想知道它们是否可以(或应该)用于集合。
我对您对以下方法的反馈感兴趣:
- 项目集合在 URI http://foobar.com/items 处公开
- 在该 URI 上发出初始 GET 请求的客户端将不包含 If-None-Match 标头。在这种情况下,服务器返回所有项目(或服务器自行决定的某个数量,例如最近的 N 个项目)。响应包含一个 Etag 标头,指示“tick stamp”,它表示服务器伪时钟的当前伪时间(例如,每次数据更改时都会增加一些计数器)。
- 客户端缓存返回的项目。
- 在后续的 GET 请求中,客户端在其 If-None-Match 标头中包含先前收到的 Etag 值。服务器检查它是否有比 If-None-Match 标头更新的项目,如果是,则仅返回较新的项目。否则,它会返回 304 状态(“未修改”)并且没有项目。
问题 - 我是否通过仅返回 #4 中较新的项目而不是整个集合(其中包括已缓存在客户端上的项目)来颠覆 GET 的语义含义?或者这似乎是一种合理的方法?您能提出更好的替代方法吗?
提前致谢。
【问题讨论】:
-
作为后续,我遇到了 RFC 3229(增量编码),这似乎很合适。
标签: rest