HTTP Client Resilience
Design outbound calls to be predictable and observable.
Commands
use Illuminate\Support\Facades\Http;
$res = Http::baseUrl(config('services.foo.url')) ->timeout(5) ->retry(3, 200, throw: false) ->withHeaders(['Accept' => 'application/json']) ->get('/v1/things', ['q' => 'bar']);
if (!$res->successful()) { Log::warning('foo api failure', [ 'status' => $res->status(), 'body' => substr($res->body(), 0, 500), ]); }
Patterns
-
Set timeouts explicitly (client and server defaults differ)
-
Use limited retries with backoff for transient failures only
-
Prefer dependency injection for testability
-
Add request/response context to logs (redact sensitive data)
-
Use pool() for concurrency when calling multiple endpoints