如何使用 API 密钥进行 Ajax 调用?

新手上路,请多包涵

我第一次尝试从纽约时报 API ( http://developer.nytimes.com/ ) 中包含一个 API 密钥,并使用 ajax 从中获取新闻以填充本地网站,但我没有看到任何结果.有人告诉我确保在 URL 的查询参数中设置了您的 API 密钥,但我不确定该怎么做。

  ?api-key=your-key

这是我所做的:

 // Built by LucyBot. www.lucybot.com
var url = "https://api.nytimes.com/svc/search/v2/articlesearch.json";
url += '?' + $.param({
'api-key': "111111111111111111111111111111"
});
$.ajax({
url: url,
method: 'GET',
}).done(function(result) {
console.log(result);
}).fail(function(err) {
throw err;
});

我需要以 json 格式查看业务、技术等各种故事的 url,并将它们用于 ajax 调用。

原文由 Developer101 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 461
1 个回答

直接在客户端上下文中公开 API 密钥不是一个好的做法。

我强烈建议在浏览器和 API 之间创建一个抽象层。

这个想法是将 AJAX 请求定位到一个自己的后端操作,例如:

 var url = "www.mydomain.com/api/articlesearch";
$.ajax({
url: url,
method: 'GET',
}).done(function(result) {
    console.log(result);
}).fail(function(err) {
    throw err;
});

在后端 (/api/articlesearch) 中,我们使用 API 密钥将目标请求发送到纽约时报

通过这种方式,您可以获得更适合 javascript 的代码,从而保持责任的正确分配。

PS:如果你想要更安全,你可以使用环境变量定义 API 密钥。这是一个用 Ruby 编写的示例(仅供参考):

 # Inside ApisController
def articlesearch
    response = RestClient::Request.execute(
    method: :get,
    url: 'https://api.nytimes.com/svc/search/v2/articlesearch.json',
    headers: {api_key: ENV['API_KEY']})

    render json: response
end

使用这种方法,API 密钥也不会出现在 GIT 存储库中 :)

原文由 Gabriel Gomes 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题