将多个 API 调用组合到一个请求中

Posted

技术标签:

【中文标题】将多个 API 调用组合到一个请求中【英文标题】:Combining multiple API calls into one request 【发布时间】:2013-08-15 17:57:53 【问题描述】:

我正在制作一个名为“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)
  )

【问题讨论】:

Parallel asynchronous Ajax requests using jQuery的可能重复 【参考方案1】:

是否可以一起批处理 API 调用取决于 API 本身。我快速浏览了 API 并没有发现任何允许批处理多个操作的东西。我还检查了一种方法,该方法允许一次检索多个轨道信息而没有任何成功。看来你运气不好。

但是,您可以实施某种缓存来避免一直执行这些请求。例如,您可以拥有自己的服务器端服务,充当 lastfm API 和客户端应用程序之间的中间层。然后,该服务器端 API 将实现缓存和任何其他优化逻辑。

【讨论】:

以上是关于将多个 API 调用组合到一个请求中的主要内容,如果未能解决你的问题,请参考以下文章

如何调用组合多个完成处理程序以将数据组合到一个新数组

使用异步和请求包(NodeJS / Express)进行多个 API 调用

Google Batch API,多个授权标头

使用多个 api 请求和一个适配器将数据显示到 recyclerview

在 go 中一次处理多个 GET 请求

编写Twisted Client以向多个API调用发送循环GET请求并记录响应