我正在编写一个通过AJAX请求与Spotify Web API交互的应用程序。
我可以通过两种方式做到这一点。 我可以对Spotify端点使用直接(HTTPS?)GET或POST请求,如下所示:
$.ajax({
url: `https://api.spotify.com/v1/search?q=track:hysteria&type=track`,
method: "GET",
async: true,
success: function(successData){
console.log(successData);
}
});
或者我可以使用php包装器调用.php文件以与Spotify通信:
query="hysteria";
$.ajax({
url: 'getSong.php',
type: 'POST',
data: {data:query},
async: true,
success: function(successData) {
console.log(JSON.Parse(successData))
}
})
getSong.php
<?php
session_start();
require '../vendor/autoload.php';
//Create new spotify session and take accesstoken from session.
$api = new SpotifyWebAPI\SpotifyWebAPI();
$accessToken = $_SESSION["accessToken"];
$api->setAccessToken($accessToken);
$query=$_POST['data'];
$results = $api->search($query, 'track');
echo json.encode($results)
?>
我知道PHP方法需要更多代码行,并且需要使用供应商来访问Spotify PHP包装器。从我的示例中,您可以看到直接HTTPS方法更为简单。
我想知道的是,使用PHP包装器进行API操作(例如本示例)是否有任何安全性好处。为什么使用它们而不是简单的AJAX请求?
对于更复杂的请求,在使用直接HTTP请求时,我始终需要通过Spotify进行身份验证并接收令牌。在身份验证方面,我正尽力解决客户端和服务器端代码的问题,因为我不希望我的应用对用户造成任何安全问题。
答案 0 :(得分:1)
这完全取决于您对返回的信息的处理!
如果您不想对返回的信息做任何其他事情,则可以将其纯粹显示给最终用户。但是,如果您要缓存结果,或对请求或请求的结果进行一些分析(例如用户使用情况等),则后端PHP将为您提供便利。
还有一个问题,即直接API调用在获取结果时将使用客户端网络而不是PHP调用托管服务器。此外,这是从PHP脚本获取信息所需的额外跃点(客户端调用PHP脚本,PHP脚本调用API,PHP脚本将结果返回给客户端)。
答案 1 :(得分:1)
使用PHP的好处之一是,您可以添加不想在JS文件中公开的额外代码或逻辑。如果您对性能感兴趣,那么建议直接从AJAX调用Spotify终结点将对其有所改善。
答案 2 :(得分:1)
仅当您使用隐式授予流 https://developer.spotify.com/documentation/general/guides/authorization-guide/#implicit-grant-flow
时,JavaScript解决方案才有效否则,您需要服务器端解决方案才能进行授权。因为您将使用秘密密钥。
答案 3 :(得分:1)
我眼中最重要的一点是: 您的PHP文件中有一个API令牌。您不想通过一些JS文件为AJAX调用提供此令牌吗?每个人都可以通过按F12轻松看到您的令牌。 简而言之:如果API调用需要令牌或其他访问安全性,则永远不要使用客户端的直接AJAX调用。
另一点: 如果您有一个JS前端,那么您不想在那里有很多逻辑,但是如果您基本上有一个不使用任何其他自定义后端操作并且仅调用目标API的应用程序,那么您可能不想添加自己的后端仅列出和显示一点。
另一点: 如果使用Javascript,则这些文件将缓存在客户端。是的:如果API更改,兑现的文件可能仍在使用中,您的软件将无法再使用。
并且: 如果有人担心性能:当然,直接从客户端调用API可以使您更快,但是将调用路由到PHP文件中所带来的好处和安全性值得更多。