harmonyio / http-client
异步HTTP客户端
v1.0.0-rc1
2018-12-28 23:38 UTC
Requires
- php: ^7.3
- ext-json: *
- amphp/amp: ^2.1.1
- amphp/artax: ^3.0.14
- harmonyio/cache: ^1.0.0-rc1
Requires (Dev)
- harmonyio/php-codesniffer-ruleset: ^1.0.0-rc1
- harmonyio/phpunit-extension: ^1.0.0-rc1
- maglnet/composer-require-checker: ^1.1.0
- phpunit/phpunit: ^7.5.1
- slevomat/coding-standard: ^4.8.6
- squizlabs/php_codesniffer: ^3.4.0
This package is auto-updated.
Last update: 2024-09-19 12:22:19 UTC
README
异步缓存感知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') ;