Relations et Populate
Chargez automatiquement les donnees liees avec le parametre populate. Utilisez le nom du champ (local_key) pour specifier les relations a charger.
Comment fonctionne populate
Quand vous avez une relation entre deux collections (ex: commandes → clients), le champ de relation contient normalement un UUID. Avec populate, ce champ est automatiquement remplace par l'objet complet.
Sans populate :
{
"id": "cmd-001",
"id_client": "cli-123",
"montant": 150.00
}Avec ?populate=id_client :
{
"id": "cmd-001",
"id_client": {
"id": "cli-123",
"nom": "Dupont",
"email": "dupont@mail.com"
},
"montant": 150.00
}Syntaxe
Regle importante : Utilisez le nom du champ (local_key) tel qu'il apparait dans vos donnees, pas le nom de la relation.
# Une seule relation ?populate=id_client # Plusieurs relations (separees par virgule) ?populate=id_client,id_produit,id_categorie # Exemple complet curl "https://api.skemacms.com/public/commandes?populate=id_client,id_produit" \ -H "X-API-Key: pk_live_xxx"
Exemples par type de relation
belongsTo (N:1)
Une commande appartient a un client. Le champ id_client contient l'UUID du client.
GET /public/commandes?populate=id_client
Plusieurs relations
Une commande a un client ET un produit.
GET /public/commandes?populate=id_client,id_produit
Exemple JavaScript complet
const API_KEY = process.env.SKEMA_API_KEY;
const BASE_URL = 'https://api.skemacms.com/public';
const headers = {
'X-API-Key': API_KEY,
};
// Recuperer les commandes avec client et produit
const getCommandesWithRelations = async () => {
const params = new URLSearchParams({
page: '1',
perPage: '20',
sort: '-created_at',
populate: 'id_client,id_produit'
});
const res = await fetch(`${BASE_URL}/commandes?${params}`, { headers });
const data = await res.json();
// Chaque commande a maintenant id_client et id_produit comme objets
data.data.forEach(commande => {
console.log('Client:', commande.id_client?.nom);
console.log('Produit:', commande.id_produit?.titre);
});
return data;
};
// Recuperer un item specifique avec ses relations
const getCommandeById = async (id) => {
const res = await fetch(
`${BASE_URL}/commandes/${id}?populate=id_client,id_produit`,
{ headers }
);
return res.json();
};Restrictions
- -Seules les collections autorisees par votre cle API peuvent etre populees
- -Si une collection cible n'est pas accessible, le champ reste un UUID
- -Le populate ne fonctionne qu'avec les champs qui ont une relation definie