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éthodetoArray() 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
Utilisezmake:resource.
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.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, utilisezcollection().
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 danstoArray().
Champs conditionnels
when() — Ajout conditionnel
Inclure un champ uniquement si une condition est remplie.
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.
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.
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 automatiquementmeta et links.
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 dansdata. Désactivez-le via AppServiceProvider::boot().
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.