将多个API调用合并到一个请求中
Combining multiple API calls into one request
我正在制作一个名为"Your Life in Music"的网络应用程序,用户可以在该应用程序中输入自己的生日,该应用程序会显示他们出生以来每个生日的热门广告牌。该应用程序与Last.fm api对话,以检索每首歌曲的专辑艺术。目前,该应用程序需要一段时间才能编译所有专辑艺术,有人建议将所有API调用合并到一个请求中,以加快速度。不过我还是个新手,我不确定这能不能做到。所以我的问题是:如何将多个调用合并为一个请求?
以下是应用程序:http://www.dailyspiro.com
关键代码:
function compileDisplay(birthDays) {
// create an HTML list that for each birthday displays top song, artist, and album art
htmlObj = {}
for (i = 0; i < birthDays.length; i++) {
var age = birthDays[i][0]; // age isn't equal to i if user was born before 1958
var date = birthDays[i][1];
var track = billboard[date]['song'];
var artist = billboard[date]['artist'];
getAlbumArt(age, track, artist, birthDays);
}
}
function getAlbumArt(age, track, artist, birthDays) {
$.getJSON("http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key=(myApiKey)&artist=" + artist + "&track=" + track + "&format=json&callback=?", function (data) {
try {
var image = data.track.album.image[2]['#text'];
if (image == 'http://cdn.last.fm/flatness/catalogue/noimage/2/default_album_medium.png') {
throw 'generic image';
}
} catch (err) {
var image = 'images/' + track + '.jpg';
}
compileHtml(age, track, artist, image, birthDays)
})
}
是否可以将API调用批处理在一起取决于API本身。我快速查看了API,没有发现任何允许批处理多个操作的内容。我还检查了一种方法,该方法可以同时检索多个曲目信息,但没有成功。看来你运气不好。
但是,您可以实现某种缓存,以避免一直执行这些请求。例如,您可以拥有自己的服务器端服务,该服务充当lastfm API和客户端应用程序之间的中间层。然后,服务器端API将实现缓存和任何其他优化逻辑。
相关文章:
- Wicket在另一个请求之后触发请求
- 如何使请求等待上一个请求完成
- Nodejs一个请求阻塞另一个请求
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- 如何将请求响应传递给另一个请求
- 主干-用一个请求替换整个集合
- Node.js在一个请求中提供多个文件
- 在angular cordova应用程序中发布一个请求中的多个文件
- $http请求在一个请求中返回所有记录而不分页
- 有没有一种方法可以用一个请求加载多个iframe
- 如果用户发送另一个请求,请使用 .abort() 取消现有的 ajax 请求
- 如何使用 angularjs 将$http请求返回的数据用于同一控制器中的另一个请求
- Ajax 触发两次替换 Rails 4 中的最后一个请求内容
- 在完成上一个请求之前中止新的 AJAX 请求
- 如何阻止 ajax 重复上一个请求
- Rails:在一个请求中渲染 html 和 js
- Javascript 一个请求多个 JS 文件
- JavaScript在一个请求中处理不同的内容类型
- MongoDB-组合多个命令来发送和返回一个请求
- Instagram API没有在一个请求中提取所有数据