使用Slim + Guzzle从PHP应用程序调用异步API

时间:2018-05-21 23:37:03

标签: php api asynchronous slim guzzle

我正在使用 Slim 框架处理php应用程序。我的应用程序主页正在进行大约20次REST API调用,这会减慢页面加载速度。

我读到我可以使用像 Guzzle 这样的Http客户端来异步调用这些API,但我找不到任何有关如何使用Guzzle with Slim的文章。

有人能说出如何使用Guzzle和Slim。

或者是否还有其他可以加快页面加载的解决方案?

N.B:我是PHP的新手

1 个答案:

答案 0 :(得分:1)

要使用Guzzle with Slim,你需要

通过运行composer

安装它
$ composer require guzzlehttp/guzzle:~6.0

Guzzle installation Guzzle Quickstart

创建依赖注册,例如

<?php

use GuzzleHttp\Client;

$container = $app->getContainer();

$container['httpClient'] = function ($cntr) {
    return new Client();             
};

并将其放在加载主引导文件index.php时将执行的位置。

然后在你的代码中,你可以从容器中获取guzzle实例

$guzzle = $container->httpClient;

例如,如果您有以下路线

$app->get('/example', App\Controllers\Example::class);

控制器Example如下

<?php
namespace App\Controllers;

use GuzzleHttp\ClientInterface;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;

class Example
{
    private $httpClient;

    public function __construct(ClientInterface $httpClient) 
    {
        $this->httpClient = $httpClient;
    }

    public function __invoke(Request $request, Response $response, array $args)
    {
        //call api, etc..etc
       $apiResponse = $this->httpClient->get('http://api.blabla.org/get');
       //do something with api response
       return $response;
    }
}

要将guzzle实例注入Example控制器,您需要创建其依赖注册

use App\Controllers\Example;

$container[Example::class] = function ($cntr) {
    return new Example($cntr->httpClient);
}

要加快页面加载速度,如果您是API开发人员,请从那里开始。如果您不是API开发人员且无法控制,请尝试考虑是否可以通过删除非必要的API来减少API调用的数量。或者作为最后的手段,缓存对存储的API调用响应,以便您的应用程序以后检索更快。

例如使用redis。 您计算API url调用的哈希值,包括其查询字符串,并使用哈希作为访问缓存API调用响应的密钥。