kinetis / revolt-http-client
A Revolt-native, Fiber-suspending implementation of Symfony's HttpClientInterface — usable standalone by any project (AsyncAws or otherwise), not only Kinetis.
Requires
- php: ^8.4
- amphp/http-client: ^5.3.6
- symfony/http-client: ^8.1.4
- symfony/http-client-contracts: ^3.7.1
Requires (Dev)
- infection/infection: ^0.35.0
- kinetis/framework: ^1.28.1
- phpstan/phpstan: ^2.2.8
- phpunit/phpunit: ^12.5.33
- vimeo/psalm: ^6.16.1
README
kinetis/revolt-http-client
A Revolt-native, Fiber-suspending implementation of Symfony's HttpClientInterface
Built for Kinetis, but usable in
any PHP project — this package depends on nothing beyond
symfony/http-client (and its symfony/http-client-contracts) and
amphp/http-client. No kinetis/framework required.
use Kinetis\RevoltHttpClient\Http; $http = new Http()->withBaseUrl('https://api.example.com')->withToken($key); $orders = $http->get('/orders', ['status' => 'open'])->throw()->json(); $http->post('/orders', ['sku' => 'A1', 'quantity' => 2]);
A request made through this client suspends the calling Fiber and yields
back to Revolt's event loop while waiting on the network, instead of
blocking the whole process — so several run at once through
Kinetis\Async\concurrently() with no pooling API of its own.
An error status is returned rather than thrown: successful(),
failed(), clientError(), and serverError() are answers to branch
on, and throw() opts into raising instead. Read the body with
json(), jsonPath('customer.email'), or body().
AmpHttpClientFactory::create() returns the underlying Symfony
HttpClientInterface on its own, for libraries that want to be handed a
client:
use Kinetis\RevoltHttpClient\AmpHttpClientFactory; $client = AmpHttpClientFactory::create(); $response = $client->request('GET', 'https://example.com/');
Using it with AsyncAws
Every AsyncAws client — S3, SQS, SES, DynamoDB, or any of its other
services — extends AsyncAws\Core\AbstractApi, whose constructor takes
an optional ?HttpClientInterface $httpClient:
use AsyncAws\S3\S3Client; use Kinetis\RevoltHttpClient\AmpHttpClientFactory; $s3 = new S3Client(['region' => 'us-east-1'], null, AmpHttpClientFactory::create());
Nothing about this is Kinetis-specific — the same pattern works for any
other library that accepts an injectable HttpClientInterface.
Installation
composer require kinetis/revolt-http-client
Requires PHP 8.4+ (the floor symfony/http-client:^8.0 itself requires).
Full documentation:
kinetis.dev/docs/revolt-http-client.html.
License
MIT — see LICENSE.