harmonyio/http-client

异步HTTP客户端

v1.0.0-rc1 2018-12-28 23:38 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\Artax\DefaultClient;
use Amp\Redis\Client;
use HarmonyIO\Cache\Provider\Redis;
use HarmonyIO\Cache\Ttl;
use HarmonyIO\HttpClient\Client\ArtaxClient;
use HarmonyIO\HttpClient\Message\CachingRequest;
use function Amp\wait;

// create instance of the HTTP client
$httpClient = new ArtaxClient(
    new DefaultClient(),
    new Redis(new Client('tcp://127.0.0.1:6379'))
);

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

// 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\Artax\DefaultClient;
use Amp\Redis\Client;
use HarmonyIO\Cache\Provider\Redis;
use HarmonyIO\HttpClient\Client\ArtaxClient;
use HarmonyIO\HttpClient\Message\Request;
use function Amp\wait;

// create instance of the HTTP client
$httpClient = new ArtaxClient(
    new DefaultClient(),
    new Redis(new Client('tcp://127.0.0.1:6379'))
);

// 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));

客户端接口

HTTP客户端的接口仅包含一个方法:Client::request(\HarmonyIO\HttpClient\Message\Request $request)

$request参数可以是“普通”非缓存请求(HarmonyIO\HttpClient\Message\Request)或缓存请求(HarmonyIO\HttpClient\Message\CachingRequest)。

HarmonyIO\HttpClient\Message\Request

请求类的构造函数至少需要一个请求的URL,可选的HTTP方法(默认为GET)。

可以在请求类的setter方法中设置可选的请求部分

<?php declare(strict_types=1);

namespace Foo;

use HarmonyIO\HttpClient\Message\Request;

$request = (new Request('https://httpbin.org/post', 'POST'))
    ->setProtocolVersions('1.1', '2.0')
    ->addHeader('foo', 'bar')
    ->addHeader('baz', 'qux')
    ->setBody('foobar')
;

HarmonyIO\HttpClient\Message\CachingRequest

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

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

<?php declare(strict_types=1);

namespace Foo;

use HarmonyIO\Cache\Ttl;
use HarmonyIO\HttpClient\Message\CachingRequest;

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