Quoi de neuf dans Kuzzle ? Winter Release 2019

Bonjour à tous!

J’espère que vous avez tous passé de bonnes fêtes et que vous êtes prêt pour cette nouvelle année 2019 qui s’annonce riche en évolutions chez Kuzzle!

Ici à Montpellier l’hiver est déjà presque terminé mais malgré les courtes journées nous n’avons pas chômé!
Lire cet article en Anglais: https://blog.kuzzle.io/kuzzle-winter-release-2019

 

winter-is-over

 

Kuzzle

Intégration du protocol MQTT au cœur

Le cœur de Kuzzle est maintenant en version 1.6. Cette release mineur voit l’arrivée du support du protocole MQTT directement dans le cœur et non plus au travers d’un plugin.

 

La demande pour ce protocole se faisant croissante, nous avons préféré l’intégrer directement dans Kuzzle afin de simplifier la tâche pour les développeurs d’applications IoT.

 

Le protocol est désactivé par défaut, pour l’activer il faut modifier votre configuration dans votre kuzzlerc:

{
  "server": {
    "protocols": {
      "mqtt": {
    	"enabled": true
      }
    }
  }
}

Support des alias Elasticsearch

Kuzzle est à présent capable de reconnaître et utiliser les alias Elasticsearch.

 

Bien qu’il puisse les utiliser comme les autres indexes, leurs création doit se faire directement au travers de l’API d’Elasticsearch.

SDK Javascript exposé dans les plugins

Nous avons décidé d’exposer le SDK JS 6 dans le contexte des plugins. Cette version spéciale du SDK utilise un protocole spécial directement branché sur le cœur de Kuzzle au lieu de passer par la couche réseau.

 

Ainsi les développeurs de plugins pourront profiter du même confort de développement que les développeurs d’applications client en utilisant les fonctions haut niveau du SDK.

// With old execute() syntax
const request = new this.context.constructors.Request({
 controller: 'document',
 action: 'create',
 index: 'blackmesa',
 collection: 'lambda-core',
 body: { gordon: 'freeman' }
});
await this.context.accessors.execute(request);

// With the embedded SDK
await this.context.accessors.sdk.document.create(
 'blackmesa',
 'lambda-core',
 { gordon: 'freeman' }
);

Utilisation de fonctions pour les hooks et pipes

Il est maintenant possible de passer directement des fonctions aux hooks, pipes ou action de contrôleur dans les plugins.

 

Jusqu’à présent il était uniquement possible de passer une chaîne de caractère correspondant à une fonction de l’objet plugin.

this.hooks = {
 'document:afterCreate': (...args) => this.myFunction(...args)
};

this.pipes = {
 'document:afterGet': (...args) => this.restrictUser(...args)
};

this.controllers = {
 newController: {
   myAction: (...args) => this.myAction(...args)
 }
};

Kuzzle Plugin Advanced Boilerplate

Un nouveau boilerplate pour les plugins est disponible.

 

Il permet aux développeurs de démarrer rapidement le développement d'un plugin tout en respectant les bonnes pratiques, notamment sur la séparation des préoccupations et les tests unitaires.

 

C’est notre base pour la majorité des plugins Kuzzle que nous développons pour nos clients.

 

Pour plus de détails, consultez le README sur Github

 

Nouvelle documentation

Après des mois de rédaction et de peaufinage, la nouvelle version de notre documentation est enfin prête!

 

Cette nouvelle version a été développé entièrement de façon personnalisée avec metalsmith afin de correspondre au mieux à nos besoins.

 

Les plus gros changements sont un remaniement complet de la documentation de l’API, du système de plugins et de Koncorde, la documentation de la dernière version de nos SDK avec un maximum d’exemples de code et une recherche Algolia disponible sur l’ensemble de la documentation.

 

 

Pour finir, nous avons rédigé des Getting Started en Javascript, Go, C++ et Java pour faciliter la prise en main de nos SDK’s.

 

N’hésitez pas à aller jeter un coup d'œil, qui sait c’est peut être le jour pour se mettre enfin au Go ? ;)

 

SDK’s

Cet hiver nous avons beaucoup avancé sur la dernière version de nos SDK et nous sommes très impatient de pouvoir enfin les release officiellement.

Sortie officielle du SDK JS 6

Après des mois de bêta test, la dernière version de notre SDK Javascript a enfin été release officiellement.

Nous conseillons à tous les développeurs d’utiliser cette version si ce n’était pas déjà le cas!

 

Si vous utilisiez une version bêta du SDK JS 6, pensez à vérifier les breakings changes, notamment:

Vous pouvez dès à présent intégrer la dernière version du SDK en faisant simplement:

> npm install kuzzle-sdk

Premiers SDK communautaires: Dart et Rust

Pour la première fois des contributeurs externes ont développé un SDK pour Kuzzle.

Cela nous a fait très plaisir de voir que la communauté Dart/Flutter soit aussi intéressée par Kuzzle, et nous tenons particulièrement à remercier @prijindal et @stafyniaksacha pour leur travail sur le SDK Dart !

De son côté, @alexandrebouthinon de l’équipe Kuzzle a lui aussi réalisé sur son temps libre un nouveau SDK en Rust ! Nous espérons que la communauté Rust sera contente de savoir qu’elle peut maintenant utiliser Kuzzle plus facilement grâce à l’API haut niveau offerte par ce SDK.

 

Vous pouvez dès à présent consulter la nouvelle page de listing des SDK sur notre documentation: https://docs.kuzzle.io/sdk-reference/

 

La documentation pour ces SDK n’est pas encore disponible mais ils sont très similaire au SDK Javascript et suivent scrupuleusement l’architecture de notre API au niveau des contrôleurs et actions ainsi que des différents paramètres.

Javascript/Go/C++/Java: Instantiation avec une classe Protocole

Les SDK s'instancient à présent directement avec un Protocol.

 

Ainsi les responsabilités sont mieux séparés entre le Protocol qui assure la communication avec Kuzzle et le SDK qui gère les fonctionnalités du mode offline.

 

Cette évolution est un des dernier breaking change avant la release final des SDKs.

 

// Javascript
const kuzzle = new Kuzzle(
  new WebSocket('localhost')
);
// C++
using namespace kuzzleio;

kuzzleio::Kuzzle *kuzzle = new kuzzleio::Kuzzle(
  new kuzzleio::WebSocket("localhost")
);
// Golang
kuzzle, _ := kuzzle.NewKuzzle(websocket.NewWebSocket("kuzzle"), nil)

Javascript: Compatibilité avec React Native

Nous avons le plaisir d’annoncer qu’à présent le SDK Javascript est complètement compatible avec la dernière version de React Native!

 

L’utilisation des Symbol posait problème pour d’anciennes version, cela est maintenant corrigé.

Go/C++/Java: Chasse aux fuites mémoire et stabilité

Afin d’améliorer la robustesse de nos SDK, nous avons cherché et corrigé toutes les fuites mémoires de nos wrappers C et C++.

Ces fuites mémoires étaient également responsable des crashs aléatoires des SDK’s.

A présent les tests fonctionnels du C++ sont lancés avec Valgrind pour s’assurer qu’aucune fuite mémoire n’est présente dans le SDK.

 

C’est une étape très importante avant la release final car à présent les SDK’s dérivés du C++ commence à être suffisamment stables pour être utilisés en production.

 

Kuzzle <3 Vue.js

Ceux qui nous connaissent savent que nous ne jurons quasiment que par Vue.js pour développer des applications frontend.

 

L’Admin Console est un parfait exemple de la symbiose entre un frontend en Vue.js et un backend avec Kuzzle.

 

Nous travaillons actuellement sur un Getting Started spécialement pour Vue.js, ainsi qu'un How-To complet sur le développement d'une application Todo MVC avec Kuzzle et Vue.js.

Boilerplate Vue.js et CoreUI

Nous utilisons aussi beaucoup CoreUI pour nous faciliter le développement d’applications IoT, c’est pourquoi nous avons créé un boilerplate utilisant Vue.js, CoreUI et le SDK JS 6.

 

https://github.com/kuzzleio/kuzzle-vuejs-coreui-boilerplate

 

Ce boilerplate inclus l’authentification des utilisateurs, la gestion des pertes de connexions, l’internationalisation avec I18N et un exemple de tests end-to-end avec Cypress.

 

Conclusion

Cette fois nous sommes dans la dernière ligne droite pour la sortie officielle de nos SDKs. Cela a été un travail de longue haleine mais nous ne sommes pas peu fier du résultat.


Nous allons à présent pouvoir nous concentrer sur les nouvelles fonctionnalités que nous souhaitons ajouter à Kuzzle, nous vous tiendrons informés ;-)

 

Nos autres releases:  Release Kuzzle

Adrien Maret

Postes associés