簡體   English   中英

如何將api請求計數存儲到PHP腳本以快速回復客戶端?

[英]How to store api request count to a PHP script for fast reply to the client?

我最近在這里問: 如何知道哪個網站要求php提供外部圖像?

第三方網站請求如下圖像:

<img src="http://www.myserver.com/mypage.php?api=APIKEY&text=some-text-here" alt=""/>

我需要每小時和每天限制特定api密鑰的訪問權限。

現在我在mysql DB上存儲了一些數據:

id,apikey,limit_ip,limit_referer,limit_hour,limit_day

1,JFKHJSDLGHUFIE,127.0.0.1,*,250,10000

<?php

//Verify Referer
if(
    !isset($_SERVER['HTTP_REFERER']) || $_SERVER['HTTP_REFERER'] == "" ||
    !isset($_GET['apik']) || $_GET['apik'] == "" ||
    !isset($_SERVER['REMOTE_ADDR']) || $_SERVER['REMOTE_ADDR'] == "") {
        exit("API error, your referer informations aren't set");
} else {
    //Site referer
    $site = $_SERVER['HTTP_REFERER'];
    //Ip referer
    $ip = $_SERVER['REMOTE_ADDR'];
    //Get api key
    $apik = htmlentities($_GET['apik']);

    try
    {
        $options = array(
            PDO::MYSQL_ATTR_INIT_COMMAND    => "SET NAMES utf8"
        );
        //MySQL connection
        $bdd = new PDO('mysql:host=localhost;dbname=apitest', 'root', '', $options);
    }
    catch(Exception $e)
    {
        //If error, die
        die('Error: '.$e->getMessage());
    }


    //Lookup for the apikey in the database
    $answer = $bdd->query('SELECT * FROM apiCode WHERE apikey = "'.$apik.'" LIMIT 0,1');
    //Fetch settings for this api key
    while ($data = $answer->fetch()) {
        $limit_ip = $data['limit_ip'];
        $limit_referer = $data['limit_referer'];
        $limit_hour = $data['limit_hour'];
        $limit_day = $data['limit_day'];
    }

    //Verify API limits
    //Cookie, session, database? 


    //Return content
    echo "Api : Success!";

}

我認為最好的方法是在數據庫中創建一個表,如:

id,access_hour,access_day

使用cron作業等每小時重置access_hour字段,但是服務內容將花費更多的時間,因為MySQL非常懶散,如果它快速:)它會更好。

Cookie將存儲在遠程計算機上,因此不可靠。

會話的持續時間為15分鍾......因此存儲和限制訪問時間太短。

以上所有陳述僅來自我的觀點。

我的問題是:如何在不影響服務速度的情況下每小時和每天存儲和限制特定API密鑰的訪問次數?

  • 沒有:它只需要快速可靠。

我不會把這些數據放在mysql中。 您不需要耐久性或持久性來獲取此類信息。 使用memcached會更好,並使用如下算法:

http://en.wikipedia.org/wiki/Leaky_bucket

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM