9 Mar 2016

Retour sur le BBL hapi.js

Lundi 29 février, @JbPionnier est venu nous présenter hapi.js. Ce module Node.js est un serveur web spécialisé dans l’exposition d’API JSON/REST. Voici une synthèse de ce que nous avons pu voir.

hapi.js est un micro-framework développé par Walmart en remplacement de Express. Après une période où hapi.js était basé sur Express, aujoud’hui il en est complétement indépendant.

Les principaux avantages de hapi.js sont :

  • la validation des données en entrée et en sortie,
  • la gérération de la documentation avec Swagger,
  • l’extensibilité par plugins (il est facile de développer son propre plugin).

Validation

Bien qu’il soit possible de modifier ce comportement par défaut, la validation des données se fait avec le module Joi. La syntaxe est simple et lisible. Il est possible d’ajouter ses règles de validation et de personnaliser les messages d’erreur. Par contre si vous souhaitez gérer du multi-langue ce n’est pas natif et cela demandera une adaptation. Joi remontera ses erreurs à hapi.js si les données d’entrées ou de sorties ne sont pas valides et ces dernières seront traduites en erreurs HTTP 400 et 500.

Documentation

Le module hapi-swagger permet d’ajouter facilement la documentation Swagger au service. Les règles de validation sont présentes ainsi que la description des routes si celle ci a été définie. Etant donné que la documentation est générée à partir du code cela permet d’avoir facilement une documentation de son API à jour, ce qui n’est pas toujours évident.

Plugins

Les plugins peuvent se brancher sur 4 événements du lifecycle :

  • onRequest
  • onPreAuth
  • onPreHandler
  • onPreResponse

Les plugins permettent de gérer le système de log, l’authentification…

Chaque plugin peut définir ses propres routes. Ces dernières sont généralement configurable si le plugin est bien développé afin de ne pas avoir de conflit de route.

Lors des développements le plugin tv est intéressant pour logger l’ensemble des appels.

Autres fonctionnalités

hapi.js propose nativement d’autres fonctionnalités comme :

  • la gestion de la sécurité (protection contre XSS) qui peut être améliorée avec des plugins officiels
  • la validation des routes au démarrage, on sait tout de suite si l’on a un conflit dans nos routes (l’ordre de définition des routes n’est d’ailleurs pas important)
  • cache serveur avec des base “in memory” comme Redis ou LevelDB

Conclusion

Pour conclure et comme tout n’est jamais parfait, voici un résumé des avantages et inconvénients de hapi.js.

Avantages

  • Validation de la configuration
  • Validation des données
  • Génération de la documentation
  • Gestion par plugins

Inconvénients

  • Pas de versioning de l’API (/v1/api par exemple)
  • Ne gère pas HATEOAS
  • La communauté est petite
Share
  • Nico

    Pas de versioning de l’API (/v1/api par exemple) > Est-ce que ce n’est pas au développeur via la config de ses routes de faire cela? De ce que j’en comprend, c’est possible de le faire comme cela.