powernic / guzzle-jsonrpc
JSON-RPC 2.0 client for Guzzle, thanks for graze/guzzle-jsonrpc
Requires
- php: >=8.0
- guzzlehttp/guzzle: ^7.2
- guzzlehttp/promises: ^1.0
- psr/http-message: ^1.0
Requires (Dev)
- adlawson/timezone: ~1.0
- graze/standards: ^2.0
- mockery/mockery: ~1.6
- phpunit/phpunit: ^11
- squizlabs/php_codesniffer: ^3.9
README
This library implements JSON-RPC 2.0 for the Guzzle HTTP client. We try to support all commonly used versions of Guzzle including:
- GuzzleHTTP 6 on
master
branch,^3.0
releases - GuzzleHTTP 5 on
guzzle-5
branch,^2.1
releases - GuzzleHTTP 4 on
guzzle-4
branch,2.0.*
releases - Guzzle 3 on
guzzle-3
branch,^1.0
releases
It can be installed in whichever way you prefer, but we recommend Composer.
{ "require": { "powernic/guzzle-jsonrpc": "~3.0" } }
Documentation
<?php use Graze\GuzzleHttp\JsonRpc\Client; // Create the client $client = Client::factory('http://localhost:8000'); // Send a notification $client->send($client->notification('method', ['key'=>'value'])); // Send a request that expects a response $client->send($client->request(123, 'method', ['key'=>'value'])); // Send a batch of requests $client->sendAll([ $client->request(123, 'method', ['key'=>'value']), $client->request(456, 'method', ['key'=>'value']), $client->notification('method', ['key'=>'value']) ]);
Async requests
Asynchronous requests are supported by making use of the Guzzle Promises library; an implementation of Promises/A+.
<?php use Graze\GuzzleHttp\JsonRpc\Client; // Create the client $client = Client::factory('http://localhost:8000'); // Send an async notification $promise = $client->sendAsync($client->notification('method', ['key'=>'value'])); $promise->then(function () { // Do something }); // Send an async request that expects a response $promise = $client->sendAsync($client->request(123, 'method', ['key'=>'value'])); $promise->then(function ($response) { // Do something with the response }); // Send a batch of requests $client->sendAllAsync([ $client->request(123, 'method', ['key'=>'value']), $client->request(456, 'method', ['key'=>'value']), $client->notification('method', ['key'=>'value']) ])->then(function ($responses) { // Do something with the list of responses });
Throw exception on RPC error
You can throw an exception if you receive an RPC error response by adding the
option [rpc_error => true]
in the client constructor.
<?php use Graze\GuzzleHttp\JsonRpc\Client; use Graze\GuzzleHttp\JsonRpc\Exception\RequestException; // Create the client with the `rpc_error` $client = Client::factory('http://localhost:8000', ['rpc_error'=>true]); // Create a request $request = $client->request(123, 'method', ['key'=>'value']); // Send the request try { $client->send($request); } catch (RequestException $e) { die($e->getResponse()->getRpcErrorMessage()); }
Contributing
We accept contributions to the source via Pull Request, but passing unit tests must be included before it will be considered for merge.
~ $ make deps ~ $ make lint test
License
The content of this library is released under the MIT License by Nature Delivered Ltd.