Skip to main content

Wat is de HTTP-client

De HTTP-client van Laravel is een gebruiksvriendelijke API die Guzzle omhult. Via de Http-facade schrijf je beknopt HTTP-requests naar externe webservices en API’s.
Guzzle is al vooraf geïnstalleerd, dus je kunt zonder extra configuratie direct aan de slag.

Basisrequests

GET-requests

Queryparameters kun je als array doorgeven.

POST-requests

Data wordt standaard verzonden als application/json.

PUT / PATCH / DELETE

Responses verwerken

Methoden zoals Http::get() geven een Illuminate\Http\Client\Response-instantie terug. Dit object biedt een groot aantal methoden om de response te inspecteren.
JSON-responses kun je ook via array-toegang uitlezen.

JSON-decodeeropties

Aan het tweede argument van json() kun je JSON-decodeervlaggen doorgeven. Wil je ongeldige JSON als exceptie behandelen, geef dan PHP’s JSON_THROW_ON_ERROR op.
Ook wanneer je in het eerste argument een sleutel opgeeft, kun je in het tweede argument vlaggen doorgeven.

Requestopties

Headers instellen

Om aan te geven dat je application/json accepteert is acceptJson() handig.
Voor de CSRF-headers (X-CSRF-TOKEN / X-XSRF-TOKEN) van AJAX-requests die je vanuit de browser naar Laravel stuurt, zie CSRF-beveiliging.

Authenticatie

Bearer-tokenauthenticatie (het meest gebruikelijk):
Basic-authenticatie:

Een basis-URL instellen

Stuur je veel requests naar dezelfde host, dan kun je die bundelen met baseUrl().

Formulierdata versturen

Wil je verzenden als application/x-www-form-urlencoded, gebruik dan asForm().

Time-outs

Wordt de time-out overschreden, dan wordt een Illuminate\Http\Client\ConnectionException gegooid. Het is aan te raden om bij aanroepen van externe API’s altijd een time-out in te stellen.

Retries

Voor tijdelijke netwerkstoringen of serverfouten kun je automatische retries instellen.
Voorwaardelijke retries (bijvoorbeeld alleen opnieuw proberen bij verbindingsfouten):

Foutafhandeling

Fouten handmatig controleren

De HTTP-client van Laravel gooit standaard geen excepties bij 4xx- en 5xx-responses. Je controleert expliciet met failed(), clientError() en dergelijke.

Excepties gooien

Met throw() wordt bij een fout een Illuminate\Http\Client\RequestException gegooid.
throw() geeft de responsinstantie terug, dus je kunt het in een methodchain gebruiken.
Wanneer je de exceptie opvangt en afhandelt:

Gelijktijdige requests

Wil je meerdere API’s tegelijk aanroepen, dan kun je ze parallel uitvoeren met pool().
Faalt een request in de pool op verbindingsniveau, bijvoorbeeld door een time-out of DNS-fout, dan is het betreffende element in $responses geen Response maar een instantie van Illuminate\Http\Client\ConnectionException.
Dit is aanzienlijk sneller dan de requests één voor één uitvoeren. Handig voor bijvoorbeeld dashboards die meerdere externe API’s aanroepen.

Testen

Mocken met Http::fake()

In tests gebruik je Http::fake() om responses te simuleren zonder daadwerkelijk HTTP-requests te versturen.
Een response instellen voor specifieke URL’s:
Een responsesequentie (bij herhaalde aanroepen worden responses op volgorde teruggegeven):

Requests verifiëren

Met Http::assertSent() verifieer je de inhoud van requests.
Roep in tests altijd eerst Http::fake() aan. Vergeet je dat, dan gaan er echte requests naar de externe API. Met Http::preventStrayRequests() kun je een exceptie laten gooien bij requests naar URL’s die niet zijn gefaket.

Stray requests voorkomen

Praktijkvoorbeeld: een serviceklasse die een externe API aanroept

In echte projecten is het een best practice om de HTTP-clientlogica te bundelen in een serviceklasse.
1

Maak de serviceklasse

2

Registreer in een serviceprovider

3

Gebruik vanuit een controller

4

Schrijf tests

Samenvatting

  • Bundel de HTTP-clientlogica in een serviceklasse
  • Stel altijd time-outs in (timeout() en connectTimeout())
  • Stel retries in voor tijdelijke storingen (retry())
  • Gebruik in tests altijd Http::fake() en roep externe API’s niet echt aan
  • Voeg Http::preventStrayRequests() toe aan je testsetup voor extra zekerheid
  • Beheer API-tokens en inloggegevens via omgevingsvariabelen en config/services.php
Laatst gewijzigd op 6 september 2026