Difference between revisions of "VT2020-Helidon-Demo"

From air
Jump to navigation Jump to search
Line 35: Line 35:
 
Commençons par configurer ce serveur web :
 
Commençons par configurer ce serveur web :
   
  +
Config config = Config.create();
   
 
Tout d'abord, nous devons construire une instance de l'interface Config en invoquant sa méthode create () pour lire notre fichier de configuration du classpath, qui correspond au fichier application.yalm.
 
Tout d'abord, nous devons construire une instance de l'interface Config en invoquant sa méthode create () pour lire notre fichier de configuration du classpath, qui correspond au fichier application.yalm.
Line 42: Line 43:
 
app:
 
app:
 
greeting: "Hello"
 
greeting: "Hello"
 
 
server:
 
server:
 
port: 8080
 
port: 8080
 
host: 0.0.0.0
 
host: 0.0.0.0
 
 
  +
   
 
On instancie et construit le serveur avec la méthode JSONP méthode permettant d'envoyer des données structurées au format JSON entre différents domaines. L'acronyme signifie JSON (JavaScript Object Notation) with Padding (avec formatage).
 
On instancie et construit le serveur avec la méthode JSONP méthode permettant d'envoyer des données structurées au format JSON entre différents domaines. L'acronyme signifie JSON (JavaScript Object Notation) with Padding (avec formatage).
Line 54: Line 55:
 
.addMediaSupport(JsonpSupport.create())
 
.addMediaSupport(JsonpSupport.create())
 
.build();
 
.build();
  +
  +
  +
La méthode get (String key), fournie par Config, renvoie un nœud, ou un sous- nœud spécifique, à partir du fichier de configuration spécifié par key. Dans notre exemple la méthode config.get("server"), permet donc de récupérer tout le nœud serveur c’est-à-dire port:8080 et host:0.0.0.0
  +
  +
Ainsi le serveur va être configuré avec sur le port 8080 et il sera accessible par tous les adresse IPV4 de la machine locale (host:0.0.0.0).
  +
  +
D’autre part la méthode createRouting permet de configuré le routage :
  +
  +
En effet, cette méthode va nous permettre de créer de spécifier des routes pour accéder aux Health support, au Metric support via respectivement l’URL suivante :
  +
  +
http://localhost:8080/health
  +
  +
http://localhost:8080/metrics
  +
  +
Mais elle nous permet surtout dec configurer un service :
  +
  +
avec
  +
  +
GreetService greetService = new GreetService(config)
  +
  +
  +
.register("/greet", greetService)
  +
  +
  +
En effet selon la requête de l’utilisateur et donc l’url d'entrée la réponse va être différent :
  +
  +
@Override
  +
public void update(Routing.Rules rules) {
  +
rules
  +
.get("/", this::getDefaultMessageHandler)
  +
.get("/{name}", this::getMessageHandler)
  +
.put("/greeting", this::updateGreetingHandler);
  +
}
  +
  +
  +
  +
Ainsi si l’url entrée est http://localhost:8080/greet ou la requête HTTP : curl -X GET http://localhost:8080/greet :
  +
  +
L’Api nous retournera Hello World.
  +
  +
Si l’url entrée est http://localhost:8080/greet/RICM ou la commande curl -X GET http://localhost:8080/greet/RICM :
  +
  +
L’Api nous retournera Hello RICM.
  +
  +
  +
On également intéragir avec l’api avec une requête put par exemple : de la manière suivante :

Revision as of 00:04, 29 November 2020

Cette page contient une démonstration simple, qui explique et expose les différent composants de Helison SE leur fonctionnement.

Démonstration

Génération du code d'une API

Il est très facile de démarrer avec Helidon SE il suffit de lancer l'archetype suivant avec maven :

 mvn -U archetype:generate -DinteractiveMode=false \
   -DarchetypeGroupId=io.helidon.archetypes \
   -DarchetypeArtifactId=helidon-quickstart-se \
   -DarchetypeVersion=2.1.0 \
   -DgroupId=io.helidon.examples \
   -DartifactId=helidon-quickstart-se \
   -Dpackage=io.helidon.examples.quickstart.se

Le résultat est alors un projet simple qui montre les bases de la configuration du serveur Web et de l'implémentation des règles de routage de base.

Il faut ensuite entrer dans le dossier helidon-quickstart-se et construire l'application avec maven, Helidon va alors lancer en interne un Netty web serveur très rapide et léger :


 cd helidon-quickstart-se

Explication du code

Il faut d'abord savoir qu'Helidon utilise l'outil de gestionnaire de projet Maven, ainsi pour démarrer avec l’API WebServer, nous devons ajouter la dépendance requise Maven au fichier pom.xml :

       <dependency>
           <groupId>io.helidon.webserver</groupId>
           <artifactId>helidon-webserver</artifactId>
       </dependency>

Inspiré par NodeJS et d'autres frameworks Java, le composant serveur Web d'Helidon est une API asynchrone et réactive qui s'exécute au-dessus de Netty.


Commençons par configurer ce serveur web :

Config config = Config.create();

Tout d'abord, nous devons construire une instance de l'interface Config en invoquant sa méthode create () pour lire notre fichier de configuration du classpath, qui correspond au fichier application.yalm.

Le fichier application.yalm est le suivant :

app:
  greeting: "Hello"
server:
  port: 8080
  host: 0.0.0.0
 


On instancie et construit le serveur avec la méthode JSONP méthode permettant d'envoyer des données structurées au format JSON entre différents domaines. L'acronyme signifie JSON (JavaScript Object Notation) with Padding (avec formatage).

WebServer server = WebServer.builder(createRouting(config))
 .config(config.get("server"))
 .addMediaSupport(JsonpSupport.create())
 .build();


La méthode get (String key), fournie par Config, renvoie un nœud, ou un sous- nœud spécifique, à partir du fichier de configuration spécifié par key. Dans notre exemple la méthode config.get("server"), permet donc de récupérer tout le nœud serveur c’est-à-dire port:8080 et host:0.0.0.0

Ainsi le serveur va être configuré avec sur le port 8080 et il sera accessible par tous les adresse IPV4 de la machine locale (host:0.0.0.0).

D’autre part la méthode createRouting permet de configuré le routage :

En effet, cette méthode va nous permettre de créer de spécifier des routes pour accéder aux Health support, au Metric support via respectivement l’URL suivante :

http://localhost:8080/health
http://localhost:8080/metrics

Mais elle nous permet surtout dec configurer un service :

avec

GreetService greetService = new GreetService(config)


.register("/greet", greetService)


En effet selon la requête de l’utilisateur et donc l’url d'entrée la réponse va être différent :

@Override
public void update(Routing.Rules rules) {
    rules
        .get("/", this::getDefaultMessageHandler)
        .get("/{name}", this::getMessageHandler)
        .put("/greeting", this::updateGreetingHandler);
}


Ainsi si l’url entrée est http://localhost:8080/greet ou la requête HTTP : curl -X GET http://localhost:8080/greet :

L’Api nous retournera Hello World.

Si l’url entrée est http://localhost:8080/greet/RICM ou la commande curl -X GET http://localhost:8080/greet/RICM :

L’Api nous retournera Hello RICM.


On également intéragir avec l’api avec une requête put par exemple : de la manière suivante :