spacetab-io / harmony-http-client
异步 http 客户端
1.0.1
2020-04-16 15:16 UTC
Requires
- php: >=7.3
- ext-json: *
- amphp/amp: ^2.4
- amphp/http-client: ^4.2
- spacetab-io/harmony-cache: ^1.1
Requires (Dev)
- amphp/phpunit-util: ^1.3
- harmonyio/php-codesniffer-ruleset: ^1.0.0-rc1
- maglnet/composer-require-checker: ^1.1.0
- phpunit/phpunit: ^9
- slevomat/coding-standard: ^4.8.6
- squizlabs/php_codesniffer: ^3.4.0
This package is auto-updated.
Last update: 2024-09-17 00:46:26 UTC
README
异步缓存感知 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');