我有一个应用程序,它使用来自多个应用程序APIS(Facebook,Twitter,Instagram等等)的数据,从PHP中的REST端点访问它们。
我正在为我的应用用户构建虚荣网址,例如http://www.myapp.com/username。
如果我有数据库,我可以从数据库中获取用户数据以显示在用户页面中。
使用REST服务,每次进入URL时,都会调用API从主网站获取信息。
问题变得越来越大,因为应用程序将从搜索引擎抓取工具中获得大量流量(我不会降低抓取速度)
第一个问题:由于API提供有限的访问权限(每小时2000个查询),有一种方法可以跳过api调用(例如,使用memcache)?
第二个问题:我想制作一个虚荣网址,所以每次调用http://www.myapp.com/username我都要调用api来获取用户ID然后再输入用户名,我想知道这是否是正确的方法,大多数网站都使用url重写,但是当你有外部数据而不是你的内部数据库时如何处理呢?
感谢阅读,需要任何帮助!
答案 0 :(得分:0)
关于使用memcache,您将遇到的一个大问题是验证缓存数据并使其过期。
假设您按照以下方式实现它:
function getSomeData() {
if (Memcache::has('key-for-data')) {
return Memcache::get('key-for-data');
} else {
$data = RestApi::getData();
Memcache::put('key-for-data', $data);
return $data;
}
}
这似乎足够明智但是,如果通过任何其他方式访问REST API会发生什么? (就像另一个第三方应用程序将数据发布到同一个API)。然后,缓存的数据可能无效,您将无法了解它。
从您的应用程序的角度来看,对底层数据存储的更改是完全随机的,而且完全不透明且不可知,因此它不是缓存的良好目标。
另一方面,如果数据更新(即订阅服务),您可以从服务获得某种“推送”通知,您可以将其用作触发器以使相关缓存条目无效。然而,这是额外的复杂性,需要在两端都得到支持。
对不起,这不是一个真正的答案,但这是一个部分答案,评论太长了: - )
答案 1 :(得分:0)
尝试使用某种框架。它应该使路由更简单。
网址重写会发生在vi .htaccess中,因此用户永远不会看到网址的重写。
我能想到的两种方式是:
在.htaccess中重写,使所有已定义的路由保持不变,在所有其他情况下(即http://www.example.com/username),用户控制器方法将注入用户名和URL之间。
定义路由,以便处理所有已知路由并使defualt路由负责计算用户ID并执行所有必要的操作。
对于缓存,使用memcache / redis缓存查询/用户对象/经常访问的任何其他内容。