ourgoldpackages / exchange
Tools to communicate with external services
Requires
- php: ^7.2|^8.0
- ext-json: *
- laravel/framework: *
README
Установка
composer require ourgold/exchange:^1.0
Note: (при необходимости можно с осторожностью добавить ключ --ignore-platform-reqs)
После завершения установки выполнить команду
php artisan vendor:publish --provider="Ourgold\Exchange\ExchangeServiceProvider" --tag="config"
И обязательно отредактировать параметр api_superclass, указав нужный суперкласс заместо стандартного.
После настройки, выполнить миграцию
php artisan migrate
И добавить команду в планировщик app/Console/Kernel.php метод schedule
$schedule->command('exchange:process-queue')->everyMinute();
Env переменные
| Переменная | Описание | Пример |
|---|---|---|
EXCHANGE_API_CALLS_DELAY | Задержка в секундах между последовательными вызовами API при обработке очереди. По умолчанию: 5. | 5 |
GATEWAY_BASE_URL | Базовый URL шлюза для отправки уведомлений в Telegram при ошибках в очереди. Если не задан — уведомления отключены. | https://gateway.example.com/ |
EXCHANGE_QUEUE_SYNC | Синхронная обработка: при true задания выполняются сразу при постановке в очередь, без ожидания cron-команды exchange:process-queue. По умолчанию: false. | false |
Использование
Для использования необходимо реализовать свою версию класса \Ourgold\Exchange\Services\ExternalAPIs
, добавив в него методы, возвращающие инстансы классов для работы с внешними API.
После чего для постановки запросов в очередь необходимо вызвать метод \Ourgold\Exchange\Services\ExchangeService::queue()
Первый аргумент - массив имён методов, которые вызываются друг за другом
(каждый последующий вызывается на результате вызова предыдущего метода)
Второй аргумент - массив аргументов, передаваемых последнему методу из цепочки
Третий аргумент - callback-класс с реализованным методом __invoke, куда передастся результат вызова последнего метода в цепочке
Пример 1
\Ourgold\Exchange\Services\ExchangeService::queue(
[
'exampleAPI',
'users',
'get',
],
null,
\App\TestCallbackHandler::class,
);
Цепочка вызова:
(new \Ourgold\Exchange\Services\ExternalAPIsTest())->exampleAPI()->users()->get();
В данном примере сначала вызовется метод exampleAPI() в классе \Ourgold\Exchange\Services\ExternalAPIs
, который возвращает инстанс класса ExternalAPIExample.
Далее вызовется метод users() класса ExternalAPIExample и наконец метод get()
Аргументы никакие передаваться не будут (второй параметр)
Результат вызова передастся в callback-класс \App\TestCallbackHandler (в magic-метод __invoke)
Пример 2
\Ourgold\Exchange\Services\ExchangeService::queue(
[
'exampleAPI',
'login',
],
['test_login', 'test_password'],
\App\TestCallbackHandler::class,
);
Цепочка вызова:
(new \Ourgold\Exchange\Services\ExternalAPIsTest())->exampleAPI()->login('test_login', 'test_password');
В данном примере сначала вызовется метод exampleAPI() в классе \Ourgold\Exchange\Services\ExternalAPIs
, который возвращает инстанс класса ExternalAPIExample.
Далее вызовется метод login($login, $password) класса ExternalAPIExample с аргументами test_login и test_password
Результат вызова передастся в callback-класс \App\TestCallbackHandler (в magic-метод __invoke)