所以我使用这个API,它允许我从数据库中获取数据,以便使用json和javascript在我的网站上显示。我想弄清楚如何保护我的API密钥。他们说你可以使用java或C#进行调用,然后使用javascript显示json数据?所以基本上我的想法是我使用单独的脚本语言(c#或java我认为PHP也可以工作?)来进行调用,然后获取结果并将其显示在客户端,这样API密钥就隐藏在服务器端代码中。 / p>
我不知道我应该怎么做。有谁知道如何在理论上做到这一点?
答案 0 :(得分:0)
一些事情:
除此之外,你所要求的是完全可能的。最简单的方法是查询一些带有要调用的API链接的PHP脚本call_api.php
。所以(从你的粘贴代码中复制),假设你要调用: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
参数(你希望用作{{1}查询的路径和可能的参数})。