Skip to main content

Qu’est-ce qu’une API Resource

Lorsque vous construisez une API, renvoyer un modèle Eloquent directement en JSON risque d’exposer des colonnes que vous vouliez cacher, ou d’envoyer plus de données que le client n’en a besoin. Une Eloquent API Resource ajoute une couche de transformation entre le modèle et la réponse JSON. Sa méthode toArray() définit explicitement ce qui est inclus et sous quelle forme. Principaux avantages :
  • Contrôle total des champs renvoyés
  • Renommage/traitement des champs centralisé
  • Champs conditionnels
  • Relations imbriquées cohérentes

Créer une Resource

Utilisez make:resource.
Le fichier est créé dans app/Http/Resources.
$this accède aux propriétés du modèle : la Resource sert de proxy.

Utilisation dans un contrôleur

Retournez simplement la resource depuis une route ou un contrôleur.
Ou avec la méthode toResource() du modèle :
toResource() recherche automatiquement la classe correspondante (UserResource). Par défaut, la réponse est enveloppée sous la clé data.

Collections de resources

Pour plusieurs modèles, utilisez collection().
Ou via toResourceCollection() d’une collection Eloquent :

Collection de resource personnalisée

Pour ajouter des métadonnées à la collection, créez une classe dédiée.

Transformation des champs

Renommez ou traitez les valeurs dans toArray().

Champs conditionnels

when() — Ajout conditionnel

Inclure un champ uniquement si une condition est remplie.
Si la condition est fausse, la clé est retirée de la réponse.

mergeWhen() — Ajout conditionnel groupé

Ajoutez plusieurs champs conditionnellement d’un coup.

whenLoaded() — Uniquement si chargé

Incluez la relation seulement si elle est déjà eager-loaded : prévient N+1 tout en gardant des réponses flexibles.
Contrôlez le chargement côté contrôleur.

whenCounted() — Compter conditionnellement

Inclut le comptage d’une relation chargé via loadCount().

Resources imbriquées

Imbriquez d’autres resources pour une structure cohérente.

Ajouter des métadonnées

with() — Métadonnées au niveau supérieur

Surchargez with() pour ajouter des données au top-level d’une collection.
Exemple :

additional() — Métadonnées dynamiques

Depuis le contrôleur, ajoutez des métadonnées dynamiques.

Combinaison avec la pagination

Passer un résultat paginé à une resource ajoute automatiquement meta et links.
Ou :
Exemple :
Même avec withoutWrapping(), la pagination conserve toujours la clé data pour coexister avec meta / links.

Désactiver le wrapping

Par défaut, la resource externe est enveloppée dans data. Désactivez-le via AppServiceProvider::boot().
withoutWrapping() ne concerne que l’enveloppement externe. Les clés data définies manuellement ne sont pas retirées.

Exemple : API utilisateur

Application typique : liste et détail utilisateur avec réponses homogènes.

UserResource

UserController

Pages associées

Introduction aux relations Eloquent

Définitions de relations et eager loading.

Pagination

Combiner la pagination et les API Resources.
Dernière modification le 13 juillet 2026