虚荣网址+ REST +网络爬虫

时间:2013-02-05 15:55:16

标签: php apache api url rest

我有一个应用程序,它使用来自多个应用程序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重写,但是当你有外部数据而不是你的内部数据库时如何处理呢?

感谢阅读,需要任何帮助!

2 个答案:

答案 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中,因此用户永远不会看到网址的重写。

我能想到的两种方式是:

  1. 在.htaccess中重写,使所有已定义的路由保持不变,在所有其他情况下(即http://www.example.com/username),用户控制器方法将注入用户名和URL之间。

  2. 定义路由,以便处理所有已知路由并使defualt路由负责计算用户ID并执行所有必要的操作。

  3. 对于缓存,使用memcache / redis缓存查询/用户对象/经常访问的任何其他内容。