Vytvořil jsem vlastní HTTP Client pro PHP 8.5+

Vytvořil jsem vlastní HTTP Client pro PHP 8.5+
11 Pro

11. 12. 2025

V ekosystému PHP existuje spousta skvělých HTTP klientů, jako je Guzzle nebo Symfony HttpClient. Přesto jsem se rozhodl vytvořit vlastní řešení: brainweb/http-client. Mým cílem bylo postavit lehkou, moderní a snadno rozšiřitelnou knihovnu přímo pro PHP 8.5, která má „v základu“ vyřešené věci – zejména inteligentní opakování požadavků a detailní logování.

Knihovnu najdete volně dostupnou na GitHubu: PavelStrejcek/HTTP-Client

Automatické opakování (Retry Logic) a Jitter

Jednou z klíčových vlastností mého HTTP klienta je konfigurovatelná strategie opakování s exponenciálním odkladem (exponential backoff).

Když API neodpoví, knihovna nezkusí požadavek zopakovat hned (což by mohlo zahltit už tak přetížený server), ale čeká. Čas čekání se s každým pokusem prodlužuje.

Co knihovna řeší za vás:

  • Exponential Backoff: 1. pokus za 100ms, 2. za 200ms, 3. za 400ms...
  • Jitter (Náhodný rozptyl): K časům přidáváme náhodnou odchylku. To je kritické pro prevenci problému zvaného "Thundering Herd", kdy by se tisíce čekajících klientů pokusily připojit ve stejnou milisekundu.
  • Retryable Status Codes: Automaticky opakuje jen chyby, kde to dává smysl (např. 408, 429, 50x), nikoliv u chyb v aplikaci (400).

Logování, které pomůže

HTTP-Client je navržen tak, aby logoval kompletní kontext chyby. Pokud používáte FileLogger (nebo implementujete vlastní přes LoggerInterface), dostanete přesné informace:

  • HTTP metodu a URL.
  • Návratový kód.
  • Čas, kdy k chybě došlo.

Díky tomu okamžitě vidíte, zda API spadlo na timeout, nebo jestli vrací chybu validace dat.