0

我有一个应用程序使用来自多个应用程序 APIS(Facebook、Twitter、Instagram 等)的数据,从 PHP 中的 REST 端点访问它们。

我正在为我的应用用户建立一个虚荣 URL,比如http://www.myapp.com/username

如果我有一个数据库,我可以从数据库中获取用户数据以显示在用户页面中。

使用 REST 服务,每次我进入 URL 时,都会调用从主要网站获取信息的 API。

问题越来越大,因为该应用程序将从搜索引擎爬虫那里获得大量流量(我不会降低爬取率)

第一个问题:由于 API 提供有限的访问权限(每小时 2000 次查询),有没有办法跳过 api 调用(例如,使用 memcache)?

第二个问题:我想制作一个虚荣网址,所以每次我调用http://www.myapp.com/username我都必须调用 api 来获取用户 ID,然后是用户名,我想知道这是否是正确的方法要做到这一点,大多数网站都是通过 url 重写来实现的,但是当你有外部数据而不是内部数据库时如何处理呢?

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

4

2 回答 2

0

尝试使用某种框架。它应该使路由更简单。

url 重写将在 vi .htaccess 中发生,因此用户永远不会看到 url 的重写。

我能想到的两种方法是:

  1. 在 .htaccess 中重写,以便您定义的所有路由都保持不变,并且在所有其他情况下(即http://www.example.com/username),用户控制器方法被注入到用户名和 url 之间。

  2. 定义路由,以便处理所有已知路由,并让默认路由负责找出用户 ID 并执行所有必要的操作。

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

于 2013-02-05T16:07:16.797 回答
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)。然后,缓存的数据可能无效,您将不知道。

从您的应用程序的角度来看,对底层数据存储的更改是完全随机的,而且完全不透明且不可知,因此它不是缓存的好目标。

另一方面,如果您可以在数据更新时从服务中获得某种“推送”通知(即订阅服务),您可以将其用作使相关缓存条目无效的触发器。然而,这是额外的复杂性,并且需要在两端都得到支持。

抱歉,这不是一个真正的答案,但它是一个部分答案,评论太长了:-)

于 2013-02-05T16:05:07.900 回答