Directus 9 : une solution open source pour créer des webservices REST et GraphQL automatiquement

nov. 07, 2021

La majorité des applications actuelles utilisent des webservices ; en tant que développeur nous devons créer et maintenir ces APIs. C'est une tâche que j'apprécie très peu : la majorité du code est répétitif et doit être impeccable pour éviter tout problème de sécurité.

Je cherche souvent des solutions pour remplacer ce code répétitif par des solutions automatique. Je vous le dit tout de suite : je ne suis pas fan des solutions propriétaires comme Firebase ou iCloud/CloudKit. Le webservice est peut être fastidieux à coder mais il est au coeur des solutions d'apps mobiles, et dépendre du bon vouloir d'une autre entreprise me pose problème.

La solution que je viens de tester s'appelle Directus : c'est un projet open source, gratuit, qui vise à générer un webservice, une api et un site web d'administrateur automatiquement.

Commencez par voir mon avis en vidéo :

Comprendre ce qu'est un Headless CMS

Directus est un headless CMS : il permet de gérer du contenu (CMS), mais ne propose pas d'interface graphique pour afficher ce contenu aux utilisateurs finaux (headless). Il y a bien un interface graphique, mais elle se destine principalement aux administrateur, pour qu'ils puissent créer, modifier et supprimer les données.

Pour que les utilisateurs puisse visualiser ces données, il faut créer une app ou un site web soi-même et interroger Directus pour obtenir les données dans ces apps. Le rôle de Directus est de fournir cette API utilisable dans toutes nos apps clients.

Principales fonctionnalités de Directus

Il s'installe en quelques minutes et doit être connecté à une base de données (j'ai testé avec MySQL mais il fonctionne aussi avec d'autres solutions) ; puis il se charge du reste :

  • il découvre les tables actuelles en base de données et crée des types de données
  • vous pouvez créer et modifier vos types directement depuis l'interface web et Directus modifie la base de données en conséquence
  • pour chaque type de données il génère une API en REST et en GraphQL
  • il crée une table pour utilisateurs et permet toute la gestion automatiquement (authentification, droits d'accès, inscription, invitations, 2FA, etc.)
  • on peut créer des API manuellement en parallèle de celles générées automatiquement
  • on peut ajouter du code de validation à exécuter avant ou après chaque api automatique

Bref c'est une solution que j'apprécie beaucoup même si je suis uniquement dans ma première phase de test.

Différence avec d'autres solution comme Firebase ou CloudKit :

  • Le projet est open source et ne peut pas disparaître à tout moment.
  • Le maintient du projet est actuellement très actif, mais si un jour il devait s'arrêter, la dernière version supportée pourra continuer à fonctionner pendant très longtemps
  • Tout est fait pour les données soient indépendante de Directus et stockées en SQL classique
  • Je peux à tout moment coder mon propre webservice et reprendre la base de données MySQL que Directus a préparé pour moi (je peux effacer sans soucis ses tables à lui, il restera uniquement mes tables de données pures)
  • Directus propose une solution hébergée mais j'ai plutôt choisi la version à installer soi-même. Ainsi je suis libre de mon choix d'hébergeur (AWS, OVH, Hetzner, DigitalOcean, etc.).

Compatibilité avec les applications clientes

L'API générée par Directus supporte le REST et GraphQL : 2 standards utilisables simplement dans toutes les technologies actuelles.

Je compte m'en servir dans une app Flutter / Dart, mais ce sera applicable aussi à n'importe quel langage (Swift, JavaScript, Kotlin, Java, C#, etc.)

Limitations actuelles

Il y a beaucoup de concepts à apprendre pour arriver à exploiter au maximum Directus. Au début on est un peu submergé par les multiples concepts.

La documentation est présente, plutôt bien faite, mais parfois incomplète. On se retrouve souvent à chasser les informations à travers les multiples canaux officiels : https://docs.directus.io/, discussions GitHub et le Discord.

Si on veut ajouter du code personnel (Hooks, Endpoints, etc.) il faut utiliser du JavaScript (ou du TypeScript) et Node.js. Si vous ne maîtrisez pas ces technos (c'est mon cas) il y a des frictions 😁

Conclusion

J'ai toujours un peu peur de passer tout ce temps à apprendre une solution spécifique, et l'avenir me dira si cet investissement de temps était rentable. Mais pour le moment j'aime beaucoup ce que je découvre et je gagne du temps sur mon projet.

Rien que la gestion des utilisateurs vaut déjà le coup pour moi (inscriptions, authentification, sécurité, etc.) ; alors récupérer une api complète en cadeau me rend heureux 🎁

J'envisage de créer des cours ou tutos concernant Directus, si je suis toujours aussi enthousiaste après plusieurs semaines d'utilisation. Je les mettrai bien entendu sur https://www.purplegiraffe.fr quand ils seront prêts.

Purple Giraffe - Devenez créateur d’apps iPhone, Android et Flutter
Apprenez la programmation et le code dans des cours accessibles à tous (Swift ou en Dart)

Aviez-vous déjà utilisé Directus avant de lire cet article ? Que pensez-vous de cette solution ? Vous en connaissez une autre que vous préférez ? ⬇️ Utilisez les commentaires pour me tenir au courant ⬇️

Happy coding!

Maxime