Automatiser la création de vos Collections avec Directus

ConseilsDéveloppement web
directus api collections

Directus est un CMS headless qui vous permet de créer des modèles de données composés des champs de votre choix. L’interface est excellente et permet de faire à peu près tout ce qu’on pourrait faire avec un framework traditionnel.
Mais si souhaitez créer vos Collections et vos champs de façon programmatique pour gagner du temps ? Voici notre méthode pour créer vos Collections via l’API de Directus.

Collections et Fields

Les collections dans Directus sont des groupes organisés d’éléments de contenu similaires, comparables à des tables dans une base de données. Elles permettent de structurer et gérer des données de manière cohérente et flexible.

Chaque collection est composée de plusieurs fields, qui sont des champs individuels définissant précisément les attributs ou propriétés spécifiques de chaque entrée (texte, date, nombre, fichier, relation, etc.). Ces champs sont configurables et assurent la saisie uniforme et structurée des informations dans Directus.

Ces champs peuvent se créer facilement via l’interface mais lorsqu’on veut créer de nombreuses collections avec pour chacune des dizaines de champs, l’approche programmatique devient la plus efficiente.

Structure de la Collection

Justement, Directus propose une API permettant de créer des Collections sans passer par l’interface. Imaginons que nous souhaitions créer deux collections posts et events. Nous allons démarrer avec un JSON :

[
  {
    "name": "posts",
    "displayName": "Posts",
    "icon": "article",
    "singleton": false
  },
  {
    "name": "events",
    "displayName": "Events",
    "icon": "event",
    "singleton": false
  }
]

Ce JSON précise le nom de la collection, son icône et que la collection accueille plusieurs objets.

Créer la Collection via l’API

Quelques prérequis techniques afin de créer vos collections :

  • Node.js installé
  • Fichier .env correctement configuré avec DIRECTUS_URL et DIRECTUS_TOKEN
  • Dossier data contenant collections.json

Ensuite voici notre script qui vous permettra de créer vos collections :

A noter que dans ce script je pense directement par l’API sans utiliser le SDK de directus. Ce choix est volontaire car le SDK change selon les versions et la documentation n’est parfois pas à jour. En passant directement par l’API avec une requête classique, on s’affranchit de ces changements de version et le script continuera de fonctionner bien que le SDK évolue.

require('dotenv').config();
const axios = require('axios');
const fs = require('fs');
const path = require('path');

function createApiClient(directusUrl, token) {
  return axios.create({
    baseURL: directusUrl,
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    }
  });
}

function loadJsonData(filePath) {
  return JSON.parse(fs.readFileSync(filePath, 'utf8'));
}

async function createCollection(api, collection) {
  return api.post('/collections', {
    collection: collection.name,
    meta: {
      icon: collection.icon,
      display_template: '{{name}}',
      hidden: false,
      singleton: collection.singleton,
      translations: [{ language: 'fr-FR', translation: collection.displayName }]
    },
    schema: { name: collection.name }
  });
}

async function run() {
  const directusUrl = process.env.DIRECTUS_URL;
  const token = process.env.DIRECTUS_TOKEN;
  if (!token) {
    console.error('ERROR: DIRECTUS_TOKEN must be set in your .env file');
    process.exit(1);
  }

  const api = createApiClient(directusUrl, token);
  const collectionsPath = path.join(__dirname, 'data', 'collections.json');
  const collections = loadJsonData(collectionsPath);

  for (const collection of collections) {
    try {
      const response = await createCollection(api, collection);
      console.log(`Created collection: ${collection.name}`);
    } catch (error) {
      console.error(`Failed to create collection ${collection.name}:`, error.message);
    }
  }
}

run();

Vous pouvez également ajouter des champs lors de la création de Collections avec la clé fields.

Cette approche vous permettra de créer toutes vos collections en un rien temps et libre à vous de repasser par l’interface pour ajuster vos collections si besoin.

Gestion des erreurs et logging

Lors de l’exécution du script, il est essentiel de prévoir une gestion claire des erreurs pour identifier rapidement les éventuels problèmes. Pensez à bien consulter les logs affichés dans votre terminal, car ils contiennent des informations précieuses pour diagnostiquer toute anomalie rencontrée lors de la création des collections. Vous pourrez ainsi intervenir efficacement en cas d’imprévu.

En automatisant la création de vos collections grâce à l’API de Directus, vous optimisez votre flux de travail, simplifiez la gestion des données, et gagnez significativement en productivité. Vous disposez désormais d’une solution fiable, évolutive et adaptée aux besoins de vos projets futurs.

Discutons ensemble
pour faire décoller
votre projet

Agence Debord

9 rue des Colonnes

75002 - Paris