spacetab-io/harmony-http-client

异步 http 客户端

1.0.1 2020-04-16 15:16 UTC

README

Latest Stable Version Build Status Build status Coverage Status License

异步缓存感知 http 客户端

需求

  • PHP 7.3+
  • Redis(如果想要使用 Redis 缓存提供者)

此外,对于非阻塞上下文,以下事件库之一应被安装

安装

composer require harmonyio/http-client

使用

缓存请求

以下示例展示了如何发送请求并缓存结果,以便后续调用将使用缓存的结果而不是进行新的外部 HTTP 调用。

<?php declare(strict_types=1);

namespace Foo;

use Amp\Http\Client\HttpClientBuilder;
use HarmonyIO\Cache\Provider\InMemory;
use HarmonyIO\Cache\Ttl;
use HarmonyIO\HttpClient\Client\HttpClient;
use HarmonyIO\HttpClient\Message\CachingRequest;
use function Amp\Promise\wait;

// create instance of the HTTP client
$httpClient = new HttpClient(
    HttpClientBuilder::buildDefault(),
    new InMemory()
);

// create a new request to be cached for 10 seconds
$request = new CachingRequest('TestRequestKey', 'https://httpbin.org/get', 'GET', new Ttl(10));

// make the request and cache it
$result = wait($httpClient->request($request));

// all consecutive requests will now used the cached result instead of calling the external service again
$result = wait($httpClient->request($request));

非缓存请求

也可以进行非缓存请求。

<?php declare(strict_types=1);

namespace Foo;

use Amp\Http\Client\HttpClientBuilder;
use HarmonyIO\Cache\Provider\InMemory;
use HarmonyIO\HttpClient\Client\HttpClient;
use Amp\Http\Client\Request;
use function Amp\Promise\wait;

// create instance of the HTTP client
$httpClient = new HttpClient(
    HttpClientBuilder::buildDefault(),
    new InMemory()
);

// create a new request to be cached for 10 seconds
$request = new Request('https://httpbin.org/get');

// make the request (the results will NOT be cache)
$result = wait($httpClient->request($request));

// make the same request again
$result = wait($httpClient->request($request));

HarmonyIO\HttpClient\Message\CachingRequest

缓存请求类的构造函数至少期望一个键、一个 TTL、请求的 URL 以及可选的 HTTP 方法(默认为 GET)。

可选的请求部分可以在请求类的 setter 方法中设置,如前一小节所述。

<?php declare(strict_types=1);

namespace Foo;

use HarmonyIO\HttpClient\Message\CachingRequest;

$cachingRequest = new CachingRequest('UniqueCachingKey', 'https://httpbin.org/get');
$request = $cachingRequest->getRequest();
$request->setProtocolVersions(['1.1', '2.0']);
$request->addHeader('foo', 'bar');
$request->addHeader('baz', 'qux');