Kuzzle as a Framework: une toute nouvelle manière de développer des applications

Tout produit est jalonné par de grandes étapes de développement. La refonte complète d’une API est définitivement considérée comme une de ces grandes étapes.

English version

 

Aujourd’hui nous publions officiellement la version 2.8.0 de Kuzzle qui s’accompagne notamment de la nouvelle API pour étendre les fonctionnalités du backend: Kuzzle as a Framework.

 

TL;DR:

  • Nouvelle API pour étendre les fonctionnalités du backend
  • Les applications existantes basées sur des plugins restent 100% compatibles
  • Compatibilité Typescript à 100%
  • L'API des plugins sera désormais dédiée... aux plugins uniquement (briques génériques et réutilisables sur plusieurs projets)
  • La documentation a été entièrement ré-écrite pour l’occasion

Bad design lead to poor Developer eXperience

Depuis la création de Kuzzle, l’ajout de fonctionnalités métier spécifiques se fait via le système de plugins, lesquels étaient chargés depuis le système de fichiers.

 

Ce fonctionnement calqué sur Nginx avec des dossiers enabled et available faisait figure d’ovni dans le monde de Node.js et du développement web backend.

 

Bien qu’étant une application Node.js classique, Kuzzle se lançait comme une sorte d’application standalone qu’il était possible de personnaliser via ce système de plugins.

 

Nous avions conscience que cela causait de nombreuses incompréhensions pour nos utilisateurs et freinait l’adoption de Kuzzle en tant que solution de premier ordre pour développer un backend.

Talk is cheap, show me the code

Après plusieurs mois de développement, nous avons entièrement repensé la manière d’étendre les fonctionnalités du backend.

 

Le développement de nouvelles fonctionnalités et leur intégration à Kuzzle se fait à présent de la même façon que la plupart des framework Node.js disponibles.

 

Il suffit d’installer le package NPM kuzzle et de commencer à développer son application:

 

import { Backend, KuzzleRequest } from './index';
import PluginOAuth from 'kuzzle-plugin-auth-passport-oauth';

// Instantiate the backend
const app = new Backend('iot-sensors');

// Use an external plugin
app.plugin.use(new PluginOAuth());

// Register an API controller
app.controller.register('iot', {
  actions: {
    measure: {
      handler: async (request: KuzzleRequest) => {
        await app.sdk.document.create('iot', 'measures', request.input.body);

        return { status: 'created' };
      }
    }
  }
});

// Start the application
app.start()
  .then(() => {
    app.log.info('Application started');
});

 

La plupart des fonctionnalités disponibles pour les plugins le sont également dans le framework au travers de la classe Backend avec notamment:

 

En interne la classe Backend n’est que du sucre syntaxique autour de l’ancienne API des plugins.

 

Un tout nouveau Getting Started permet de prendre en main le nouveau framework en quelques minutes: Write an Application

 

Cela fait maintenant plusieurs mois que nous utilisons cette fonctionnalité en interne, cependant nous la considérons toujours comme expérimentale car nous souhaitons pouvoir intégrer d’éventuels retours de la communauté.

 

 

 

100% Compatible Typescript

Cela fait maintenant plusieurs années que la popularité de Typescript grandit auprès des développeurs ce qui en fait de facto un standard incontournable pour les produits Open Source.

 

Cette refonte de notre API interne s’est accompagnée d’une conversion en Typescript de 100% des classes et méthodes exposées aux développeurs d’applications.

 

Ainsi il est possible de profiter de la sûreté du système de types, ainsi que de la documentation intégrée et des exemples (si votre éditeur le permet).

 

 

tyepscript-completion-kuzzle

 

Nouvelle Documentation

La documentation a été également entièrement ré-écrite pour l’occasion.

 

Son découpage en différents guides facilite grandement la prise en main et l’apprentissage de Kuzzle.

 

Les références de l’API standard de Kuzzle (payloads, controllers, etc) et celle des classes du framework ont été séparées pour plus de clarté.

 

Nous en avons également profité pour refondre la recherche Algolia et utiliser le moteur Open Source d’Algolia: DocSearch.

Et maintenant ?

Nous comptons sur vos retours afin d’améliorer encore la Developer eXperience de Kuzzle.

Dans les prochains mois nous allons bien sûr continuer à ajouter de nouvelles fonctionnalités dans le framework !


N’hésitez pas à venir nous rejoindre sur Discord si vous avez des questions ou des remarques ;-)

 

Alexandre Bouthinon

Postes associés