Package Data | |
---|---|
Maintainer Username: | tochka-developers |
Maintainer Contact: | darkdarin@tochka.com (Pavel Babushkin) |
Package Create Date: | 2017-07-20 |
Package Last Update: | 2024-10-28 |
Home Page: | |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-15 15:03:26 |
Package Statistics | |
---|---|
Total Downloads: | 14,623 |
Monthly Downloads: | 1 |
Daily Downloads: | 0 |
Total Stars: | 7 |
Total Watchers: | 5 |
Total Forks: | 11 |
Total Open Issues: | 0 |
JsonRpc клиент - реализация клиента для JsonRpc-сервера. Работает по спецификации JsonRpc 2.0. Протестирован и работает с оригинальным сервером JsonRpc от Tochka.
composer require tochka-developers/jsonrpc-client
php artisan vendor:publish --provider="Tochka\JsonRpcClient\JsonRpcClientServiceProvider"
composer require tochka-developers/jsonrpc-client
vendor/tochka-developers/jsonrpc/config/jsonrpc-client.php
) в проект
(config/jsonrpc-client.php
)bootstrap/app.php
:$app->configure('jsonrpc-client');
bootstrap/app.php
:$app->withFacades();
Tochka\JsonRpcClient\JsonRpcClientServiceProvider
в bootstrap/app.php
:$app->register(Tochka\JsonRpcClient\JsonRpcClientServiceProvider::class);
Конфигурация находится в файле app/jsonrpc-client.php
.
В данном файле прописываются настройки для всех JsonRpc-подключений.
clientName
- Имя клиента. Данное имя будет подставляться в ID-всех запросов в виде префикса.
Позволяет идентифицировать сервис.default
- подключение по умолчанию. Должно содержать имя подключения.connections
- массив подключений. Каждое подключение должно иметь уникальный ключ (название подключения).Настройки подключений:
url
- URL-адрес (или IP) для подключения к JsonRpc-серверу. Должен содержать полный путь к точке входа
(например: https://api.jsonrpc.com/v1/jsonrpc).clientClass
- класс, который используется в качестве прокси-класса. Необходимо указывать полное наименование
(с пространством имен). Используется при автоматической генерации прокси-класса.extendedStubs
- генерация расширенного описания АПИ в виде классов-хелперов для входных и выходных параметров методовmiddleware
- список классов-middleware, которые подготавливают запрос перед отправкой. Возможно перечисление
классов-middleware в виде элементов массива, либо, если необходимо передать в класс дополнительные параметры - в качестве
ключей массива указываются классы-middleware, в качестве значения - массив с параметрами.
В пакете доступно две middleware:AuthTokenMiddleware
- класс авторизации по токену в заголовке. Параметры: name
- имя заголовка, value
- значение
токенаAuthBasicMiddleware
- класс Basic-авторизации. Параметры: scheme
- тип авторизации (basic
, digest
, ntlm
),
username
и password
- данные для авторизацииВызов метода JsonRpc:
use Tochka\JsonRpcClient\Client;
//....
$result = Client::fooBar('Some text');
Если необходимо использовать конкретное подключение, используется метод get
:
$result = Client::get('api')->fooBar('Some text');
Если не указано конкретное подключение - используется подключение по умолчанию.
По умолчанию клиент передает все переданные в метод параметры в виде индексированного массива.
Если JsonRpc-сервер требует передачи именнованных параметров - воспользуйтесь методом call
:
$result = Client::get('api')->call('fooBar', ['text' => 'Some text']);
Клиент поддерживает вызов нескольких удаленных методов через один запрос:
$api = Client::get('api')->batch();
$resultFoo = $api->foo('params');
$resultBar = $api->bar(123);
$resultSome = $api->call('someMethod', ['param1' => 1, 'param2' => true]);
$api->execute();
В указанном примере в переменных $resultFoo, $resultBar и $resultSome будет пустой класс Tochka\JsonRpcClient\Response
,
пока не будет вызван метод execute
. После этого будет осуществлен один запрос на JsonRpc-сервер, переменные
заполнятся вернувшимися результатами с сервера.
Клиент поддерживает кеширование результатов с помощью метода cache
:
$result = Client::get('api')->cache(10)->fooBar('Some text');
При таком вызове результаты будут закешированы на 10 минут, и последующих вызовах этого метода с такими же параметрами - запрос на сервер не будет посылаться, результат будет сразу получаться из кеша. Естественно, результаты кешируются только для успешных вызовов.
Также кеширование поддерживается и для нескольких вызовов:
$api = Client::get('api')->batch();
$resultFoo = $api->cache(10)->foo('params');
$resultBar = $api->bar(123);
$resultSome = $api->cache(60)->call('someMethod', ['param1' => 1, 'param2' => true]);
$api->execute();
Учтите, что кешироваться будет только тот метод, перед которым был вызван cache
.
Прокси-класс - это наследник JsonRpcClient, который содержит информацию обо всех доступных методах JsonRpc-сервера, а также сам делает маппинг параметров, переданных в метод, в виде ассоциативного массива. Если сервер умеет возвращать SMD-схему, то такой класс может быть сгенерирован автоматически.
Для генерации класса воспользуйтесь командой:
php artisan jsonrpc:generateClient connection
Для успешной генерации должно выполняться несколько условий:
tochka-developers/jsonrpc
. Данный пакет умеет возвращать
расширенную информацию для более точной генерации прокси-классаcomposer
.Если все указанные условия выполняются - то будет создан прокси-класс на указанное соединение. Для обновления прокси-класса (в случае обновления методов сервера) - повторно вызовите указанную команду. Если необходимо сгенерировать классы для всех указанных соединений - вызовите указанную команду без указания соединения:
php artisan jsonrpc:generateClient
Прокси-класс уже содержит информацию об используемом соединении, поэтому метод get
вызывать не нужно.
Кроме того, прокси-класс сам реализует маппинг параметров, передаваемых в метод, в ассоциативный массив для
передачи на JsonRpc-сервер. Реализация маппинга происходит только если JsonRpc-сервер использует ассоциативные
параметры.
Примеры вызовов:
// Single call
$result = Api::fooBar('Some text');
// Multiple call
$api = Api::batch();
$resultFoo = $api->cache(10)->foo('params');
$resultBar = $api->bar(123);
$resultSome = $api->cache(60)->someMethod(1, true);
$api->execute();
Классы-middleware позволяет внести изменения в исходящие запросы, например добавить дополнительные заголовки, включить авторизацию, либо внести изменения в само тело запроса.
Вы можете использовать свои классы, указав их имена в конфигурации необходимого подключения.
Класс-middleware должен реализовывать интерфейс Tochka\JsonRpcClient\Contracts\Middleware
.
В конструктор middleware при создании передаются параметры, указанные в конфигурации. Пример:
// config
'middleware' => [
\Tochka\JsonRpcClient\Middleware\AuthTokenMiddleware::class => [
'name' => 'X-Access-Key',
'value' => 'TokenValue',
],
]
// class
use Tochka\JsonRpcClient\Config;
use Tochka\JsonRpcClient\Contracts\Middleware;
use Tochka\JsonRpcClient\HttpClient;
class AuthTokenMiddleware implements Middleware
{
protected $name;
protected $value;
public function __construct($options)
{
$this->name = $options['name'] ?? 'X-Access-Key';
$this->value = $options['value'] ?? '';
}
public function handle(HttpClient $client, Config $config): void
{
$client->setHeader($this->name, $this->value);
}
}