Tools to communicate with external services

1.0.18.2 2024-04-19 06:19 UTC

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();

Использование

Для использования необходимо реализовать свою версию класса \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)