Skip to main content

Wat zijn API-resources?

Wanneer je een API bouwt en Eloquent-modellen rechtstreeks als JSON teruggeeft, kunnen kolommen die je wilt verbergen uitlekken of stuur je grote hoeveelheden data die de client niet nodig heeft. Eloquent API-resources vormen een transformatielaag tussen je modellen en de JSON-response. In de toArray()-methode definieer je expliciet “wat er in welk formaat in de response komt”. De belangrijkste voordelen zijn:
  • Volledige controle over welke velden in de response komen
  • Naamsconversies en waardebewerkingen van velden op één plek gebundeld
  • Velden voorwaardelijk tonen of verbergen
  • Relaties nesten met behoud van een consistente structuur

Resources maken

Genereer een resourceklasse met het Artisan-commando make:resource.
De gegenereerde klasse wordt geplaatst in de map app/Http/Resources.
Met $this heb je rechtstreeks toegang tot de properties van het model. Dat komt doordat de resourceklasse intern de toegang tot het model proxyt.

Gebruik in een controller

Je kunt de gedefinieerde resource teruggeven vanuit een controller of route.
Of je gebruikt de toResource()-methode van het model.
toResource() zoekt automatisch de bijbehorende resourceklasse (UserResource) op basis van de modelnaam. Standaard wordt de response gewrapt in een data-sleutel.

Resource-collecties

Wil je meerdere modellen teruggeven, gebruik dan de collection()-methode.
Of gebruik toResourceCollection() van een Eloquent-collectie.

Eigen collectieresources

Wil je metadata toevoegen aan de hele collectie, maak dan een speciale collectieresource.

Velden bewerken en transformeren

Binnen toArray() kun je veldnamen wijzigen en waarden bewerken.

Voorwaardelijke velden

when() — velden toevoegen afhankelijk van een voorwaarde

Wil je een veld alleen opnemen als aan een bepaalde voorwaarde wordt voldaan, gebruik dan when().
Als de voorwaarde van when() false is, wordt de sleutel zelf uit de response verwijderd.

mergeWhen() — meerdere velden gebundeld voorwaardelijk toevoegen

Om meerdere velden onder dezelfde voorwaarde samen te tonen of te verbergen, gebruik je mergeWhen().

whenLoaded() — alleen geladen relaties opnemen

Door een relatie alleen op te nemen wanneer die eager geladen is, kun je flexibele responses maken en tegelijk het N+1-probleem voorkomen.
Aan de controllerkant bepaal je of de relatie geladen wordt.

whenCounted() — tellingen voorwaardelijk opnemen

Neemt de met loadCount() opgehaalde telling van een relatie voorwaardelijk op.

Geneste resources

Door relaties te nesten met een andere resourceklasse behoud je een consistente structuur.

Metadata toevoegen

with() — metadata op het topniveau

Om metadata toe te voegen aan de hele collectie, override je de with()-methode.
Voorbeeldresponse:

additional() — dynamisch metadata toevoegen

Wil je aan de controllerkant dynamisch metadata toevoegen, gebruik dan additional().

Combineren met paginering

Door een pagineringsresultaat aan een resource door te geven, worden meta en links automatisch toegevoegd.
Of:
Voorbeeldresponse:
Bij pagineringsresponses wordt de data-sleutel altijd toegevoegd, ook als je withoutWrapping() hebt aangeroepen. Dit is om samen te kunnen bestaan met de meta- en links-sleutels van de paginering.

Datawrapping uitschakelen

Standaard wordt de buitenste resource gewrapt in een data-sleutel. Om dit uit te schakelen, roep je withoutWrapping() aan in de boot() van je AppServiceProvider.
withoutWrapping() heeft alleen invloed op de buitenste wrapping. Een data-sleutel die je zelf hebt gedefinieerd, wordt niet verwijderd.

Praktijkvoorbeeld: implementatie van een gebruikers-API

Aan de hand van een gebruikersbeheer-API laten we een consistent responseontwerp met resources zien.

UserResource

UserController

Gerelateerde pagina’s

Introductie tot Eloquent-relaties

Bekijk hoe je relaties definieert en eager loading gebruikt.

Paginering

Bekijk hoe je pagineringsresultaten combineert met API-resources.
Laatst gewijzigd op 6 september 2026