Используйте SDK в приложении на Laravel
PHPСервис-провайдер, фасад Slen и файл конфигурации PHP SDK — что приложение на Laravel получает от пакета и что задаёт в своём окружении.
5 мин чтения
PHP SDK поставляется с сервис-провайдером для Laravel. Он читает настройки SDK из окружения вашего приложения, собирает из них один SDK и кладёт его в контейнер. Ваш код получает этот SDK по типу или вызывает его через фасад Slen.
Настроить
Laravel сам находит сервис-провайдер и фасад пакета через обнаружение пакетов, как только пакет установлен, — команду установки даёт статья Установка.
1. Положите ключ в окружение
Добавьте API-ключ в файл .env вашего приложения или в окружение, в котором работает его сервер.
SLEN_API_KEY=sl_live_…У каждой другой настройки есть значение по умолчанию, а таблица ниже называет переменную каждой.
2. Опубликуйте файл конфигурации, если нужен свой
php artisan vendor:publish --tag=slen-sdk-configКоманда копирует config/slen-sdk.php в ваше приложение, где его можно менять. Без копии читается файл пакета, и переменные действуют точно так же.
Файл конфигурации
| Ключ | Тип | По умолчанию | Переменная окружения | Опция клиента |
|---|---|---|---|---|
api_key | string | null | SLEN_API_KEY | apiKey |
timeout | float | 65.0 | SLEN_TIMEOUT | timeout |
connect_timeout | float | 5.0 | SLEN_CONNECT_TIMEOUT | connectTimeout |
retries | int | 2 | SLEN_RETRIES | retries |
log_channel | string | null | SLEN_LOG_CHANNEL | — |
spans | string | 'null' | SLEN_SPANS | — |
span_level | string | 'info' | SLEN_SPAN_LEVEL | — |
webhook_secret | string | null | SLEN_WEBHOOK_SECRET | webhookSecret |
webhook_tolerance | int | 300 | SLEN_WEBHOOK_TOLERANCE | webhookToleranceSeconds |
Ключ файла читает переменную, которую называет таблица. Без переменной у него значение по умолчанию.
Последняя колонка — опция SDK, которой становится ключ. Для чего каждая опция, говорит статья Конфигурация.
SLEN_LOG_CHANNELназывает канал изconfig/logging.php, в который идёт журнал SDK. Без неё журнал идёт в логгер вашего приложения — Журнал.SLEN_SPANS=logпишет спаны в тот же логгер, на уровне, который называетSLEN_SPAN_LEVEL. Любое другое значение никуда их не пишет. Чтобы отправлять их куда-то ещё, привяжите в контейнере свой записывающий кSlen\Sdk\Observability\SpanRecorderInterface— Спаны.SLEN_WEBHOOK_SECRET— секрет подписи, которым вебхуки SDK проверяют доставки, — Вебхуки.Значения проверяются, когда SDK впервые берут из контейнера: при пустом ключе или таймауте, равном нулю или не являющемся числом, там выбрасывается
InvalidArgumentException.
Обратиться к Slen
Фасад вызывает SDK из контейнера. Каждый модуль SDK — метод фасада.
use Slen\Sdk\Laravel\Slen;
use Slen\Sdk\Modules\Operations\Options\ExecuteOptions;
$execution = Slen::operations()->execute(
'generate_email',
['messages' => [['role' => 'user', 'content' => 'Write a short follow-up email.']]],
new ExecuteOptions(idempotencyKey: 'order-42:email'),
);
echo $execution->status->value, PHP_EOL;SDK один на всё приложение. Любой класс, который собирает контейнер, — контроллер, задача, команда — может получить его по типу, Slen\Sdk\SlenSdk, в конструкторе или в методе. Вне такого класса попросите его у контейнера.
use Slen\Sdk\SlenSdk;
$slen = app(SlenSdk::class);
$customer = $slen->customers()->get('user_8421');
foreach ($customer->accounts as $account) {
echo $account->creditType, ' ', $account->available, PHP_EOL;
}У SDK нет статического состояния, поэтому он безопасен в воркере, который обслуживает много запросов, — Запустить под Octane.
В тесте вашего приложения привяжите Slen\Sdk\SlenSdk к SDK, собранному на тестовом дублёре из статьи Тестирование интеграции, вместо того, который собирает провайдер.
Запустить под Octane
Под Laravel Octane — на FrankenPHP, RoadRunner или Swoole — воркер обслуживает много запросов один за другим, и SDK из контейнера может жить столько же, сколько воркер.
У SDK нет статического состояния, и после сборки он не меняется, поэтому один запрос ничего не оставляет в нём следующему.
Чтобы писать журнал одного запроса в его собственный логгер, возьмите копию:
SlenSdk::withLogger()возвращает новый SDK поверх того же HTTP-клиента, а SDK из контейнера сохраняет свой логгер — Журнал.Перечислите
SlenSdkиSlenConfigвwarmфайлаconfig/octane.php. Тогда воркер собирает SDK при старте, и его HTTP-клиент держит соединения открытыми от одного запроса к другому.Воркер читает файл конфигурации один раз. После изменения окружения или
config/slen-sdk.phpперезапустите воркеры командойphp artisan octane:reload.Не ждите запуск внутри запроса: ожидание спит в воркере столько, сколько идёт запуск. Отправьте запуск через
operations.executeAsync()и читайте результат из вебхукаexecution.finishedили в задаче вашей очереди — Асинхронные запуски и ожидание.Дайте запуску внутри запроса свой таймаут и своё число повторов, чтобы он не длился дольше запроса, — Повторы и таймауты.
Один SDK обращается к Slen с одним API-ключом. Приложение, которое обращается несколькими ключами, собирает по SDK на каждый и держит их в контейнере, а не в своём статическом свойстве.
FakeHttpClientиRecordingSpanRecorderхранят каждый запрос и каждый спан, которые им передали. Им место в тестах, а не в воркере.
Что читать дальше
Конфигурация — опции SDK и для чего каждая из них.
Быстрый старт — первый запуск флоу по шагам.
Вебхуки — приёмник доставок, которые присылает Slen.
Собрано из openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d