使用 laravel 向 api 发出多个请求

Posted

技术标签:

【中文标题】使用 laravel 向 api 发出多个请求【英文标题】:Making multiple requests to an api using laravel 【发布时间】:2015-09-10 10:59:54 【问题描述】:

我正在使用 laravel 构建一个网络,它依赖于外部 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 缓存,它似乎只是为了将查询缓存到数据库(或者我可能不太了解文档)。

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

【问题讨论】:

这对 guzzle3.readthedocs.org/plugins/cache-plugin.html 或 laravel 有什么帮助,这看起来很有希望 github.com/RemiCollin/GuzzleCache 可以,我看看能不能实现 嗯,我用了这个:github.com/guzzle/cache-subscriber,它在加载时间上没有任何区别。 【参考方案1】:

好的,感谢 Dexa 的评论,我走上了正轨。我使用了https://github.com/RemiCollin/GuzzleCache(一开始我在设置时遇到了麻烦,但开发人员帮了我)。

在一个对 api 有 50 个请求的页面上,我从 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;
    


编辑:对于某些 api,这将是一个足够好的解决方案,但在我的情况下,这个 api 更新得非常频繁,当它没有被缓存时加载它需要 20 秒,它太多了,它会发生用户。所以我不会接受我自己的答案(没有足够的测试,我认为这可能是解决方案,但我不再这么认为了)

【讨论】:

以上是关于使用 laravel 向 api 发出多个请求的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4 使用数据从控制器向外部 url 发出 post 请求

如何从Angular向同一域上的Laravel API发送请求?

发出获取请求时出现多个问号

Laravel 5.4 + jQuery CORS 请求

将 Laravel Socialite 与 API 一起使用?

Laravel 55 - Passport & Vue - auth/login/logout