使用 Slim + Guzzle 来自 PHP 应用程序的异步 API 调用
Asynchronous API calls from PHP application using Slim + Guzzle
我正在使用 Slim 框架开发 php 应用程序。我的应用程序主页正在进行大约 20 次 REST API 调用,这会减慢页面加载速度。
我读到我可以使用像 Guzzle 这样的 Http 客户端来异步调用这些 API,但我找不到任何介绍如何使用 Guzzle 的文章与苗条。
谁能告诉我如何将 Guzzle 与 Slim 一起使用。
或者有没有其他可以加快页面加载速度的解决方案?
N.B: 我是PHP
的新手
要将 Guzzle 与 Slim 一起使用,您需要
通过 运行 作曲家安装
$ 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
主 bootstrap 文件加载时执行的地方。
然后在您的代码中,您可以从容器中获取 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 调用响应缓存到存储中,以便您的应用程序稍后检索更快。
例如使用redis。
您计算 API url 调用的哈希,包括其查询字符串,并使用哈希作为键来访问缓存的 API 调用响应。
我正在使用 Slim 框架开发 php 应用程序。我的应用程序主页正在进行大约 20 次 REST API 调用,这会减慢页面加载速度。
我读到我可以使用像 Guzzle 这样的 Http 客户端来异步调用这些 API,但我找不到任何介绍如何使用 Guzzle 的文章与苗条。
谁能告诉我如何将 Guzzle 与 Slim 一起使用。
或者有没有其他可以加快页面加载速度的解决方案?
N.B: 我是PHP
的新手要将 Guzzle 与 Slim 一起使用,您需要
通过 运行 作曲家安装
$ 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
主 bootstrap 文件加载时执行的地方。
然后在您的代码中,您可以从容器中获取 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 调用响应缓存到存储中,以便您的应用程序稍后检索更快。
例如使用redis。 您计算 API url 调用的哈希,包括其查询字符串,并使用哈希作为键来访问缓存的 API 调用响应。