Wat is de HTTP-client
De HTTP-client van Laravel is een gebruiksvriendelijke API die Guzzle omhult. Via deHttp-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
POST-requests
Data wordt standaard verzonden alsapplication/json.
PUT / PATCH / DELETE
Responses verwerken
Methoden zoalsHttp::get() geven een Illuminate\Http\Client\Response-instantie terug.
Dit object biedt een groot aantal methoden om de response te inspecteren.
JSON-decodeeropties
Aan het tweede argument vanjson() kun je JSON-decodeervlaggen doorgeven. Wil je ongeldige JSON als exceptie behandelen, geef dan PHP’s JSON_THROW_ON_ERROR op.
Requestopties
Headers instellen
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):Een basis-URL instellen
Stuur je veel requests naar dezelfde host, dan kun je die bundelen metbaseUrl().
Formulierdata versturen
Wil je verzenden alsapplication/x-www-form-urlencoded, gebruik dan asForm().
Time-outs
Retries
Voor tijdelijke netwerkstoringen of serverfouten kun je automatische retries instellen.Foutafhandeling
Fouten handmatig controleren
De HTTP-client van Laravel gooit standaard geen excepties bij 4xx- en 5xx-responses. Je controleert expliciet metfailed(), clientError() en dergelijke.
Excepties gooien
Metthrow() wordt bij een fout een Illuminate\Http\Client\RequestException gegooid.
throw() geeft de responsinstantie terug, dus je kunt het in een methodchain gebruiken.
Gelijktijdige requests
Wil je meerdere API’s tegelijk aanroepen, dan kun je ze parallel uitvoeren metpool().
$responses geen Response maar een instantie van Illuminate\Http\Client\ConnectionException.
Testen
Mocken met Http::fake()
In tests gebruik jeHttp::fake() om responses te simuleren zonder daadwerkelijk HTTP-requests te versturen.
Requests verifiëren
MetHttp::assertSent() verifieer je de inhoud van requests.
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
Overzicht van veelgebruikte methoden
Overzicht van veelgebruikte methoden
Overzicht van responscontrolemethoden
Overzicht van responscontrolemethoden
Best practices voor integratie met externe API's
Best practices voor integratie met externe API's
- Bundel de HTTP-clientlogica in een serviceklasse
- Stel altijd time-outs in (
timeout()enconnectTimeout()) - 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