【问题标题】:Asynchronous API calls from PHP application using Slim + Guzzle使用 Slim + Guzzle 从 PHP 应用程序进行异步 API 调用
【发布时间】:2018-05-25 02:42:18
【问题描述】:

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

我读到我可以使用像 Guzzle 这样的 Http 客户端来异步调用这些 API,但是我找不到任何说明如何将 Guzzle 与 Slim 一起使用的文章。

谁能告诉如何将 Guzzle 与 Slim 一起使用。

或者有没有其他可以加快页面加载速度的解决方案?

注意:我是 PHP 新手

【问题讨论】:

  • 请向我们展示一些您的“页面加载”功能的示例代码。
  • CMIIW,在 Web 服务器请求上运行的超薄应用程序,将在单线程中运行。所以异步调用在这里不相关。您可以让 php 在 cli 上使用带有 pthread 扩展的多线程。我的建议是缓存 api 响应,例如使用 redis,或者文件或数据库。
  • @ZamronyP.Juhara 是正确的。异步请求在这里不会做太多事情 - 缓存将是一种更好的方法。或者减少渲染页面所需的请求数 - 需要 20 个似乎过多。

标签: php api asynchronous slim guzzle


【解决方案1】:

要将 Guzzle 与 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 调用响应的键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2016-12-12
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    相关资源
    最近更新 更多