Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chocofamilyme/smart-http
https://github.com/chocofamilyme/smart-http
Last synced: 12 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/chocofamilyme/smart-http
- Owner: chocofamilyme
- Created: 2018-12-17T08:36:19.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-09-16T09:51:30.000Z (over 2 years ago)
- Last Synced: 2024-12-09T01:19:02.777Z (20 days ago)
- Language: PHP
- Size: 73.2 KB
- Stars: 0
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# HTTP клинте для общения между сервисами
HTTP client на основе [Guzzle](https://github.com/guzzle/guzzle) с предустановленными настройками. Можно выполнять
настроенные запросы - класс **Request**, так и самому тонко настраивать запросы - класс **Client**### Возможности
- Кэширование GET запросов
- Автовыключение неработоспособных сервисов ([Pattern: Circuit Breaker](https://microservices.io/patterns/reliability/circuit-breaker.html))
- Повтор запроса, если сервис не отвечает за тайм аут или отвечает не успешным статусом
- Выполнение нескольких параллельных асинхронных запросов ([Pattern: API Composition](https://microservices.io/patterns/data/api-composition.html))### Требования
- PHP 7.2+
- guzzlehttp/guzzle 6.0+
- ejsmont-artur/php-circuit-breaker### Установка
```
$ composer require chocofamilyme/smart-http
```### Пример
## Простой GET запрос
```php
$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**