chocofamilyme/smart-http

HTTP клинте для общения между сервисами

1.1.1 2022-09-16 09:50 UTC

README

HTTP client на основе Guzzle с предустановленными настройками. Можно выполнять настроенные запросы - класс Request, так и самому тонко настраивать запросы - класс Client

Возможности

  • Кэширование GET запросов
  • Автовыключение неработоспособных сервисов (Pattern: Circuit Breaker)
  • Повтор запроса, если сервис не отвечает за тайм аут или отвечает не успешным статусом
  • Выполнение нескольких параллельных асинхронных запросов (Pattern: API Composition)

Требования

  • PHP 7.2+
  • guzzlehttp/guzzle 6.0+
  • ejsmont-artur/php-circuit-breaker

Установка

$ composer require chocofamilyme/smart-http

Пример

Простой GET запрос

    $request = new Chocofamily\SmartHttp\Http\Request($config, $cache);

    $options = [
        'serviceName' => 'serviceA',
        'cache'       => 3600,
        'data'        => [
            'id' => 1
        ],
    ];

    $response = $request->send('GET', 'http://service/item', $options);

Параметр $cache не обязательный. Если он отсутсвует, не работает кэширование запросов и автотключение сервисов.

Парметры, которые содержит объект $config

Ключ Значение Описание
failures По умолчанию 5 Кол-во не удачных запросов для отключения сервиса
lock_time По умолчанию 600 cек Время на которое заблокируется сервис
retry_timout По умолчанию 60 cек Сколько секунд подождать перед тем как выполнить повтор, когда сервис заблокирован
timeout По умолчанию 0.5 сек Время ожидания выполнения запроса на сервисе
connect_timeout По умолчанию 1 сек Время ожидания принятия запроса сервисом
delayRetry По умолчанию 200 мс Задержка между повторами запроса. Формула задержки номер попытки * delayRetry
maxRetries По умолчанию 3 Кол-во попыток повторов запроса
cbKeyPrefix По умолчанию "circuit_breaker" Префикс ключа, для заблокированных сервисов

Парметры $options

Ключ Значение Описание
serviceName 'serviceA' Сервис который будет заблокирован. Если имя отсутсвует, то блокировка отключена
cache 3600 сек Время жизни кэша
cachePrefix По умолчанию "smarthttp_" С каким префиксом будут сохраняться данные на сервере кэширования
data Array Данные которые нужно передать

Кэширование ответов

Можно кэшировать запросы на время указанное в параметре cache, ключом кэша является url запроса. При формирования ключа на основе url игнорируется query параметры correlation_id и span_id