使用laravel对一个api发出多个请求


Making multiple requests to an api using laravel

我正在使用laravel构建一个web,该web依赖于外部API来获取我向用户显示的数据(http://eztvapi.re就我而言)。我正在使用guzzle进行api调用,它运行良好。

API非常简单,它要么显示一个节目列表(带有它们的元数据),要么显示给定ID的一个节目的信息

当我需要显示信息时,问题就来了,比如说,15个给定的节目,用户已经选择作为最喜欢的节目。这意味着我需要查询API 15次,每次显示一次,这会大大降低网络速度(而且对API的请求太多,这对我来说似乎不正确)。

基本上是这样的:

foreach ($favorites as $fav) {
    $client = new Client();
    $res = $client->get('http://eztvapi.re/show/'.$fav->id);
    $show = $res->json(); 
}

我曾考虑将api的内容复制到我的数据库中,但这完全违背了连接到api的目的,并且需要非常频繁地更新。我认为缓存可能是一种方法,但我不清楚如何走这条路,我搜索了laravel缓存,它似乎只是为了将查询缓存到数据库(或者我可能不太了解文档)。

这样做的正确方式是什么?

好的,多亏了Dexa的评论,我走上了正轨。我曾经https://github.com/RemiCollin/GuzzleCache(一开始我在设置它时遇到了困难,但开发人员帮了我)。

在一个有50个api请求的页面上,我从20秒变为200秒。

这是我最后的代码(每次演出都会调用该函数):

<?php namespace App;
use Illuminate'Database'Eloquent'Model;
use 'GuzzleHttp'Client;
use GuzzleCache;

class Show extends Model {
    /* .. other functions .. */
    public function getShowInfo(){
        $id = $this->imdb;
        $client = GuzzleCache::client(['base_url' => 'http://eztvapi.re']);
        $res = $client->get('http://eztvapi.re/show/'.$id);
        $show = $res->json();
        return $show;
    }
}

EDIT:对于一些api来说,这是一个足够好的解决方案,但在我的情况下,这个api更新得很频繁,而且在没有缓存的情况下加载它需要20秒,这太多了,而且会发生在用户身上。所以我不会接受我自己的答案(没有经过足够的测试,我认为这可能是解决方案,但我不再这么认为了)