【问题标题】:Scaling limited API requests over time for large bundles of requests随着时间的推移为大量请求扩展有限的 API 请求
【发布时间】:2011-11-25 14:25:33
【问题描述】:

我正在使用我一直在工作的 Web 应用程序实现 Klout API。

Klout 允许您每秒执行 10 个请求,每天执行 10,000 个请求。

每个用户帐户可以查看其他 N 个用户帐户的 Klout 分数。

收集此信息的最佳方法是定期从 Klout API 请求分数作为后台进程并将这些结果存储在数据库中吗?

如果我这样做,假设我们有 10 个用户想要查看其他 30 个用户的 Klout 分数。

在日常后台流程中,假设我们遍历 10 个用户中的每一个,并查看他们的 30 个关注用户的 Klout 分数。

这将在整个过程中最多对 Klout 的 API 执行 300 次 ping 操作(但是,您最多可以包含 5 个用户来查看每个请求的分数——因此请求的数量可以减少到 60 个)。

为了避免每秒 10 个请求的上限,我应该在每个请求之间让进程休眠大约 10 秒吗?这是避免任何 API 错误的最佳方法吗?


伪例子:

$maxUserPerRequest = 5;
foreach ($users as $user){
    $follows = getKloutFollows($user); // list of klout scores to look up per user
    $minimize = 0; // allow to minimize total requests by 5 users per req.
    $batch = array() // array of 5 users to request
    foreach($follows as $follow){
       $batch[] = $follow;
       // query 5 users at a time
       if ($maxUserPerRequest % $minimize==0){
            $kloutAPI->getScore($batch); // storing results
            $batch = array();
            sleep(10); // avoid overloading API requests
       }
       $minimize++;
    }
}

【问题讨论】:

    标签: php api timeout


    【解决方案1】:

    这应该足以避免出现错误,但是执行海量数据库附加并将数据存储超过 5 天仍然会违反Terms of Service

    我会为每个请求保留一个计数器。提出 10 个请求。睡眠 1000。重置计数器。提出 10 个请求。睡 1000 人。

    【讨论】:

    • 其实不是7天吗? "You may only retain copies of Klout Data for seven days on your server, cache or database."
    • 那么,如果我在 7 天内运行这个过程,我会不会很好?
    • @mellamokb 你是对的。我倾向于考虑工作日。
    • @Atticus 只要您遵守其他 API 服务条款,是的,没问题!
    猜你喜欢
    • 2011-11-15
    • 2016-06-20
    • 1970-01-01
    • 2017-10-27
    • 2019-05-07
    • 1970-01-01
    • 2016-05-04
    • 2017-11-10
    • 2013-08-13
    相关资源
    最近更新 更多