Docs/API Publique/Fonctions avancees

Fonctions avancees

Recherche, comptage, operations en masse et gestion des collections.

Lister les collections

Recupere la liste des collections accessibles avec votre cle API.

curl "https://api.skemacms.com/public/collections" \
  -H "X-API-Key: pk_live_xxx"

Reponse :

{
  "data": ["articles", "clients", "commandes", "produits"],
  "message": "Collections recuperees avec succes",
  "statusCode": 200
}

Schema d'une collection

Recupere le schema complet : champs, types et relations.

curl "https://api.skemacms.com/public/collections/articles" \
  -H "X-API-Key: pk_live_xxx"

Reponse :

{
  "data": {
    "name": "articles",
    "label": "Articles",
    "description": "Blog articles",
    "primary_key": "id",
    "fields": [
      { "name": "title", "type": "string", "required": true },
      { "name": "content", "type": "text", "required": false },
      { "name": "published", "type": "boolean", "required": false },
      { "name": "created_at", "type": "datetime", "required": false }
    ],
    "relations": [
      {
        "name": "id_author",
        "type": "many-to-one",
        "target_collection": "users",
        "target_field": "id"
      }
    ]
  },
  "statusCode": 200
}

Recherche textuelle

Recherchez dans une ou plusieurs colonnes.

# Recherche dans tous les champs texte
curl "https://api.skemacms.com/public/articles/search?q=javascript" \
  -H "X-API-Key: pk_live_xxx"

# Recherche dans des champs specifiques
curl "https://api.skemacms.com/public/articles/search?q=react&fields=title,content" \
  -H "X-API-Key: pk_live_xxx"

Reponse :

{
  "data": [
    { "id": "uuid-1", "title": "Introduction a JavaScript", "content": "..." },
    { "id": "uuid-2", "title": "JavaScript avance", "content": "..." }
  ],
  "count": 2,
  "page": 1,
  "perPage": 20,
  "totalPages": 1,
  "statusCode": 200
}

Compter les items

Compte le nombre d'items sans les telecharger.

# Compter tous les articles
curl "https://api.skemacms.com/public/articles/count" \
  -H "X-API-Key: pk_live_xxx"

# Compter avec filtre
curl "https://api.skemacms.com/public/articles/count?published=true" \
  -H "X-API-Key: pk_live_xxx"

Reponse :

{
  "data": 42,
  "message": "Items comptes avec succes",
  "statusCode": 200
}

Creation en masse (batch)

Creez plusieurs items en une seule requete.

curl -X POST "https://api.skemacms.com/public/articles/batch" \
  -H "X-API-Key: pk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '[
    { "title": "Article 1", "content": "Contenu 1" },
    { "title": "Article 2", "content": "Contenu 2" },
    { "title": "Article 3", "content": "Contenu 3" }
  ]'

Reponse :

{
  "data": [
    { "id": "uuid-1", "title": "Article 1", ... },
    { "id": "uuid-2", "title": "Article 2", ... },
    { "id": "uuid-3", "title": "Article 3", ... }
  ],
  "message": "3 items crees avec succes",
  "statusCode": 201
}

Mise a jour en masse

Mettez a jour plusieurs items en une seule requete.

curl -X PUT "https://api.skemacms.com/public/articles/batch" \
  -H "X-API-Key: pk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '[
    { "id": "uuid-1", "published": true },
    { "id": "uuid-2", "published": true },
    { "id": "uuid-3", "published": false }
  ]'

Reponse :

{
  "data": [
    { "id": "uuid-1", "published": true, ... },
    { "id": "uuid-2", "published": true, ... },
    { "id": "uuid-3", "published": false, ... }
  ],
  "message": "3 items mis a jour avec succes",
  "statusCode": 200
}

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,
  'Content-Type': 'application/json'
};

// Lister les collections
const getCollections = async () => {
  const res = await fetch(`${BASE_URL}/collections`, { headers });
  return res.json();
};

// Schema d'une collection
const getSchema = async (collection) => {
  const res = await fetch(`${BASE_URL}/collections/${collection}`, { headers });
  return res.json();
};

// Recherche
const search = async (collection, query, fields) => {
  const params = new URLSearchParams({ q: query });
  if (fields) params.append('fields', fields);
  const res = await fetch(`${BASE_URL}/${collection}/search?${params}`, { headers });
  return res.json();
};

// Compter
const count = async (collection, filters = {}) => {
  const params = new URLSearchParams(filters);
  const res = await fetch(`${BASE_URL}/${collection}/count?${params}`, { headers });
  return res.json();
};

// Creation en masse
const batchCreate = async (collection, items) => {
  const res = await fetch(`${BASE_URL}/${collection}/batch`, {
    method: 'POST',
    headers,
    body: JSON.stringify(items)
  });
  return res.json();
};

// Mise a jour en masse
const batchUpdate = async (collection, items) => {
  const res = await fetch(`${BASE_URL}/${collection}/batch`, {
    method: 'PUT',
    headers,
    body: JSON.stringify(items)
  });
  return res.json();
};