2015-10-18 77 views
0

所以我使用這個API,它允許我從數據庫抓取數據,以使用json和javascript在我的網站上顯示。我想弄清楚如何保護我的API密鑰。他們說你可以使用java或C#進行調用,然後使用javascript顯示json數據?所以基本上我的想法是,我使用單獨的腳本語言(c#或java,我認爲PHP的工作原理?)進行調用,然後將結果顯示在客戶端,以便將API密鑰隱藏在服務器端代碼中。安全地抓取json數據

我不知道我應該如何做到這一點。有誰知道這在理論上可以做到嗎?

+0

如果您向我們展示您的代碼,這將有所幫助,但從一般意義上說,無論您使用何種編程語言,如果您發出基於HTTP的POST請求,都可以在旅行時看到內容。您會希望使用基於HTTPS的請求,並嘗試將API密鑰放入發佈請求中。 –

+0

您可以創建一個簡單的NodeJS應用程序來獲取服務器上的數據,並使用[請求](https://github.com/request/request)這樣的API密鑰是安全的請求庫,然後將該數據提供給您申請與[快遞](http://expressjs.com/)。您的客戶端應用程序將從您的節點服務器獲取數據。 – azium

+0

是的,您可以使用服務器應用程序來查詢並返回JSON。它將是一個Web服務器(也可以爲您的JavaScript頁面和資源提供服務)。它託管着API密鑰,並可能緩存返回的數據或對其進行流式處理。然而,不知道這個問題是不是太寬泛來解釋細節。 – eckes

回答

0

有幾件事情:

  1. Java和C#不腳本語言。它們是高級編程語言。
  2. 爲了解決您在pastebin上發佈的代碼,您無法向其他網站發出AJAX呼叫。這會創建一個大多數瀏覽器不允許的跨源請求。阻止跨源請求的目標是防止惡意代碼「干擾良性網站的運行」(如IETF發佈的RFC 6454所述)。

除此之外,你所要求的是完全可能的。最簡單的方法就是查詢一些PHP腳本call_api.php以及調用的API鏈接。所以(複製你的pastebin代碼),讓我們假設你想打電話:https://na.api.pvp.net/api/lol/na/v1.4/summoner/by-name/<Some ID>?api_key=<Your API Key>。與其查詢此鏈接,您可以發送類似api/lol/na/v1.4/summoner/by-name/<Some ID>的內容作爲call_api.php的參數。

call_api.php可以設置如下:

<?php 
$_API_KEY = "Your secret API key."; 

$requestSuffix = $_REQUEST['suffix']; // This is whatever the API request is 
             // E.g., "api/lol/na/v1.4/summoner/..." 

$requestURL = "https://na.api.pvp.net" . ($requestSuffix[0] != '/' ? '/' : '') . $requestSuffix; 

// Now we need to add the secret API to the end of the request URL: 
if(strpos($requestSuffix, '?') === False){ 
    // We just need to tack on "?api_key..." 
    $requestURL .= "?api_key=$_API_KEY"; 
}else{ 
    // The requested suffix already has a '?' and thus it potentially has 
    // some parameters already 
    if(substr($requestURL, -1) == '?'){ 
     // There's just a blank '?' on the end without any parameters yet. 
     $requestURL .= "api_key=$_API_KEY"; 
    }else{ 
     // The request suffix likely already contains some parameters 
     // So we'll just add the api key as another parameter 
     $requestURL .= "&api_key=$_API_KEY"; 
    } 
} 

// Now with our request URL constructed, we're ready to make the request 
$ch = curl_init($requestURL); 

// Set the cURL options: 
curl_setopt($ch, CURLOPT_HEADER, false); // don't show header in output 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); // prevent cached connections 
curl_setopt($ch, CURLOPT_FORBID_REUSE, true); // Don't pool connection for reuse 

// Execute the request: 
// (by default the response will be directly printed to the output stream or buffer) 
curl_exec($ch); 

// Make sure the connection is closed to free up resources 
curl_close($ch); 
?> 

所以你只是把這個網站的服務器上,然後就可以使用AJAX提供它的suffix參數(路徑和可能的參數調用此腳本,該腳本想用作您的查詢到na.api.pvp.net)。