VT2018 ActionHero

=Auteur=
 * Sujet : ActionHero.js


 * Enseignants : Georges-Pierre Bonneau, Didier Donsez


 * Auteur de la présentation : Hugo GROS-DAILLON


 * email : hugo.gros-d-aillon@etu.univ-grenoble-alpes.fr

=Résumé=

Le but d'ActionHero.js est de créer une boîte à outils facile à utiliser pour créer des API réutilisables et évolutives. Les clients connectés à un serveur ActionHero peuvent utiliser les différentes API ainsi que communiquer entre eux grâce à un framework de chat en temps réal intégré à la technologie.

C’est une technologie entièrement gratuite et très bien fournie en documentation. Il est donc très facile pour les utilisateurs de s’autoformer et de commencer en quelques minutes à créer des actions pour son API.

Après avoir testé cette technologie, vous n’envisagerez certainement plus de réaliser vos API différemment que avec ActionHero.js.


 * Mots clés : ActionHero.js, boîte à outils, API, framework, actions

=Abstract=

The goal of ActionHero.js is to create an easy-to-use toolbox to create reusable and scalable APIs. Clients connected to an ActionHero server can use the different APIs as well as communicate with each other through a real time chat framework integrated with the technology.

It is a completely free technology and very well documented. It is therefore very easy for users to self-train and start creating actions for their API in a few minutes.

After testing this technology, you will certainly no longer consider building your APIs differently than with ActionHero.js.


 * Keywords : ActionHero.js, toolbox, API, framework, actions

=Synthèse=

Introduction
ActionHero est un framework d'API pour les sockets tcp, les sockets web et les clients http. L'Objectif d'ActionHero.js est de créer une boîte à outils facile à utiliser pour créer des API réutilisables et évolutives. Les clients connectés à un serveur ActionHero peuvent utiliser les différentes API ainsi que communiquer entre eux grâce à un framework de chat en temps réal intégré à la technologie.

L'API ActionHero définit un point d'accès unique et accepte les entrées GET, POST, PUT et DELETE ainsi que les connexions persistantes via TCP ou des sockets web. Vous définissez des Actions qui gèrent les paramètres en entrée et les réponses de l'API. Les clients HTTP, HTTPS et TCP peuvent tous utiliser ces actions. L'API ActionHero n'est pas 'RESTful' (ce qui n'a pas de sens pour les connexions socket persistantes) mais peut être étendue pour l'être si vous le souhaitez.

ActionHero servira également des fichiers statiques pour vous, mais ActionHero n'est pas un serveur de'rendu' (comme express ou rails).

Prérequis

 * NodeJS (Version 4.0.0 ou supérieure)
 * Npm
 * Redis

Sur OSX avec Homebrew:
brew install node

brew install redis

brew services start redis

Sur Ubuntu:
(sudo) apt-get install node

(sudo) apt-get install redis-server

redis-server --daemonize yes

Sur Windows:
[download nodeJS](https://nodejs.org/en/download)

[download redis](https://github.com/MSOpenTech/redis)

run redis.exe

Installation et exécution
mkdir ~/project && cd ~/project

npm install actionhero

npx actionhero generate

npm install

npm start

__tests__
Permet de faire des tests unitaires sur l'API, des exemples sont déjà présents après la génération.

actions
C'est ici que vous allez définir les actions de votre API, en suivant le principe qui est de lire dans data.params pour les paramètres donnés par le client et d’écrire dans data.response pour indiquer ce que va retourner l’API.

bin
Fichiers binaires, vide lors de la génération.

config
Fichiers de configuration de l'application ActionHero générée, ce dossier contient différents fichiers pour configurer l’api, le serveur, l’internationalisation, etc.

initializers
Ce dossier va vous permettre d’extendre les fonctionnalités de son serveur ActionHero, c’est ici par exemple qu’on se connecte a la base de données. Vide lors de la génération

locales
Contient un ensemble de fichier JSON permetant de traduire l’ensemble du contenu présent sur le serveur dans différentes langues.

log
Contient les différents fichiers de logs écrit au cours de l'activité du serveur.

node_modules
Ce sont les dépendances générées par la commande : npm install

pids
Il contient les pids-files pour les serveurs en cours d’exécution

Public
C'est ici que se trouve le contenu statique du projet comme les fichier HTML, le CSS etc.

servers
Ce dossier est là pour vous permettre de créer vos propres serveurs. Vide lors de la génération.

tasks
C'est ici que vous définirez les tâches de votre API.

Les actions
Les actions sont le coeur d’un serveur ActionHero. Pour définir une action de l’api, il n’y à presque rien à faire !

Le but est de lire dans data.params pour les paramètres donnés par le client et d’écrire dans data.response pour indiquer ce que va retourner l’API.



Dans l'exemple ci dessus, nous avons simplement créé un fichier randomNumber.js qui contient une classe MyAction qui étends Action, nous affectons dans le constructeur de la classe un nom, une description et un outputExample qui servirons à générer la documentation associée à cette action.

Nous définissons ensuite la méthode run qui va simplement écrire dans data.response.randomNumber un nombre aléatoire.

Nous ajoutons le fichier randomNumber.js dans le dossier action et relançons simplement le serveur, tout fonctionne. L'action est disponible à l'adresse : http://localhost:8080/api/randomNumber

Chat en temps réel
En plus d’avoir la possibilité de définir les actions de votre API en un rien de temps, ActionHero fournis aussi un framework pour faire du chat en temps réel.

Une classe Client nous est fournie avec beaucoup de possibilités.

Il y a des rooms correspondant à des salles de chat qui permettant aux clients de discuter avec les autres clients présents dans la même salle.

Les méthodes de bases sont :

roomAdd permettant de se connecter à une salle,

roomLeave permettant de quitter une salle,

roomView permettant de visualiser l’ensemble des salles

et say permettant à un client d’envoyer un message dans une salle.

L’ensemble des clients ont aussi une méthode « on » qu’ils peuvent utiliser pour réagir aux différents évènements, par exemple quand un autre client fait un say.



L'exemple ci dessus est généré quand vous lancez la commande npx actionhero generate.

Quand nous arrivons sur cette page, le client fait un addRoom(« default-room ») ;

Nous sommes donc un client différent à chaque fois que l’on rafraîchit la page.

Pour résumer, nous avons un petit formulaire pour pouvoir envoyer des messages, à chaque fois qu’on écrit quelque chose et que l’on clique sur Send Message, cela exécute la fonction say du client associé avec le message présent dans le champ.

Pour l’ensemble des clients connectés, à chaque fois qu’un client fait un say, cela crée une div dans le html permettant d’afficher le message (grâce à la méthode on des clients).

Cet exemple généré est présent dans le dossier Public/chat.html, il est facile de compréhension et modifiable comme bon vous le semble.

Conclusion
La technologie ActionHero.js est une technologie qui est assez utilisée, on voit sur la page npm qu’elle est téléchargée entre 500 et 2000 fois par semaines.

Elle est gratuite et fournit une excellente documentation. Il est très facile de s'autoformer à cette technologie.

Si vous souhaitez définir votre API, cette technologie vous fera gagner un temps incroyable alors n'hésitez pas !

=Sources=

https://www.actionherojs.com/

https://docs.actionherojs.com/

https://github.com/actionhero/actionhero