Shy*_*ada 5 api rest caching angularjs restangular
假设一个应用程序使用暴露分页集合的REST api中的数据,并且集合中的项目数量可能无限大(即,一次获取所有项目并存储在浏览器会话中的项目太多).
什么是获取,缓存和使这些数据的缓存无效的好策略?
说,API就像,
GET /users?page=1&per_page=50
Run Code Online (Sandbox Code Playgroud)
使用如下响应(即包括收集数据+分页元数据)
{
"paging": {
"per_page": 20,
"page": 1,
"previous": null,
"self": "/api/v1/users?per_page=20&page=1",
"next": "/api/v1/users?per_page=20&page=2"
},
"data": [
// first 20 users
]
}
Run Code Online (Sandbox Code Playgroud)
客户端可能会也可能不会在连续页面中加载集合,一次一页.任何客户端都可以更改集合中的用户.最终的一致性就足够了,我现在并不关心写冲突.
问题是在angularjs应用程序的上下文中,但是是一般的场景.
我要做的就是使用 Angular 的$cacheFactory并为每个 API 端点都有一个条目。因此,如果您当前的 URL 是/api/v1/users?per_page=20&page=1缓存的键,则不会有/api/v1/users任何分页参数。然后,一旦返回响应,就在处理数据的函数中执行以下操作:
// add customer insert method somewhere
Array.prototype.insert = function (index, item) {
this.splice(index, 0, item);
};
var cachedData = $cacheFactory.get(key);
var insertPosition = pageSize * currentPage;
cachedData.insert(insertPosition, returnedData);
$cacheFactory.put(cachedData);
Run Code Online (Sandbox Code Playgroud)
可能比现实生活中的情况简单得多,但您明白了。