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.
