TGViewer
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter @phpproglib · 10.5K subscribers
Post #6070 2.13K
🧩 Расширенные паттерны для Symfony HttpClient: потоковая передача, ретраи и отказоустойчивость

Если вы хоть раз писали $client->request('GET', ...) и $response->toArray(), значит, уже пользовались symfony/http-client.
Для простых случаев этого хватает.

Но реальность другая:
– 100 API-эндпоинтов нужно получить за секунды, а не минуты
– JSON на 500 МБ не должен взорвать память
– API периодически “флапает”, а приложение должно выжить
– токен OAuth2 живёт 60 минут — и должен обновляться сам

💡 И тут выясняется, что HttpClient — не просто обёртка над curl, а мощный инструмент для сложных систем.

⚡️ 1. Конкурентные запросы через stream()


Обычный foreach делает запросы последовательно:
10 запросов × 300 мс = 3 сек.

С stream() всё иначе — запросы идут параллельно, и общее время ≈ самому медленному из них.
foreach ($productIds as $id) {
$responses[$id] = $client->request('GET', "products/$id");
}
foreach ($client->stream($responses) as $r => $chunk) {
if ($chunk->isLast()) $prices[] = $r->toArray()['price'];
}


👉 10 запросов за ~300 мс вместо 3 секунд.

🧠 2. Потоковый парсинг JSON (новинка Symfony 7.3)

symfony/json-streamer позволяет читать огромные JSON-файлы без загрузки их целиком в память.

composer require symfony/json-streamer


foreach ($streamReader->read($response, Type::list(Type::object(ProductDto::class))) as $product) {
// обработка 2 млн объектов без OutOfMemory
}


🧱 3. Надёжность: Retry + Circuit Breaker

RetryableHttpClient сам повторит запросы при 503/504.
А если API “упало” — кастомный CircuitBreakerClient отключает обращения на 60 секунд, чтобы не “молотить мёртвый сервис”.

🔐 4. Автоматический OAuth2

AccessTokenHttpClient берёт токен из кэша и обновляет его по необходимости.
Больше никаких ручных проверок if ($token->isExpired()).

🧪 5. Тестирование без сети

MockHttpClient с генератором позволяет точно проверить последовательность и данные запросов.
Тесты становятся детерминированными и быстрыми.

🔗 Ссылка на статью

🐸 Библиотека пхпшника
  • ❤ 3
  • 👍 3
More from @phpproglib
  1. Sep 24, 2026👍 5 способов встроить AI в Laravel Laravel AI SDK позволяет добавлять AI-функции прямо в…
  2. Sep 23, 2026🛠 Symfony 8.2 научился автоматически генерировать JSON Schema для конфигурации приложения…
  3. Sep 23, 2026🚀 Свежий релиз Laravel 13 с набором улучшений и исправлений ✅ добавлена поддержка valkey:…
  4. Sep 21, 2026⚡️ PHP 8.6 выйдет 19 ноября 2026 года. Сейчас версия находится в beta. Самые заметные изме…
  5. Sep 20, 2026❓ Какие существуют проблемы в многопоточной среде? Основные проблемы многопоточности: 1️⃣…
  6. Sep 19, 2026🌞 В Symfony 8.2 появилось 29 новых Bundle — теперь компоненты вроде Mailer, Messenger и C…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →