VT2020-Ballerina-Demo

From air
Jump to navigation Jump to search

Cette page contient les explications sur l'installation et la démonstration du langage Ballerina réalisée dans le cadre du cours VT2020. Vous pouvez consulter la fiche de synthèse pour une présentation de la technologie.

Installations

Première Installation

Pour Installer Ballerina, rendez-vous sur la page de téléchargement du site officiel. Téléchargez la version compatible avec votre système d'exploitation et exécutez l'installateur.

A noter qu'il existe une extension sur Visual Studio Code qui permet d'activer la coloration syntaxique pour Ballerina.

Mise à jour

Pour mettre à jour le langage, exécutez les commandes suivantes :

ballerina update
ballerina dist update

Démonstration

Le but de cette démonstration va être de réaliser un programme tweetant des citations récupérées sur une API. Et donc de réaliser une intégration entre notre programme, l'API de Twitter et l'API du site de citations.

Configuration

Pour que le programme fonctionne, il faut tout d'abord que vous ayez un compte Twitter Developer et que vous ayez créé une nouvelle application dans votre portail. Remarque : Il faut que votre application ait les permissions Read and Write, sinon elle ne fonctionnera pas.

Une fois fait placez vous dans un nouveau dossier et créez un fichier appelé twitter.toml. Ce fichier va servir à stocker nos clés et tokens de connexion à l'API de Twitter. Éditez ce fichier pour y ajouter le contenu suivant :

clientId=""
clientSecret=""
accessToken=""
accessTokenSecret=""

Et ajoutez les données suivantes obtenues depuis Twitter Developer :

  • clientId → API key
  • clientSecret → API secret key
  • accessToken → Access token
  • accessTokenSecret → Access token secret

Programme

Une fois la configuration faite, nous pouvons passez à la réalisation du programme. Dans le même répertoire que le fichier twitter.toml, créez un fichier ballerinasaid.bal.

Dans ce fichier, recopiez le contenu suivant :

import ballerina/config;
import ballerina/http;
import ballerina/io;
import wso2/twitter;

//Fonction qui va tweeter la chaine de caractères passée en paramètre
public function postTweet(string quote) {
        // Création du client Twitter qui va poster le tweet
        // On récupère les données depuis le fichier de configuration
        twitter:Client twitterClient = new ({
            clientId: config:getAsString("clientId"),
            clientSecret: config:getAsString("clientSecret"),
            accessToken: config:getAsString("accessToken"),
            accessTokenSecret: config:getAsString("accessTokenSecret"),
            clientConfig: {}
        });

        //On essaye d'envoyer le Tweet
        var result = twitterClient->tweet(quote + " #Ballerina");

        //Si l'envoie a réussi, le résultat a pour type un statut Twitter
        if (result is twitter:Status) {
            // On affiche l'ID du tweet créé ainsi que son contenu dans le terminal
            io:println("Tweet ID : ", result.id);
            io:println("Tweet URL : https://twitter.com/i/status/",result.id);
            io:println("Tweet : ", result.text);
        } else {
        // Si l'envoie est un echec, on affiche le message d'erreur dans le terminal
            io:println("Erreur : ", result);
        }
    } 

//Fonction qui récupère une citation depuis le connecteur c et l'envoie au demandeur caller
public function getQuote(http:Client c, http:Caller caller) {
    //On effectue une requête API au endpoint "/" commun à nos deux APIs
    var response = c->get("/");

    //Si la requête a abouti
    if(response is http:Response) {
        //On récupère le résultat au format JSON
        var msg = response.getJsonPayload();
        //Si msg n'est pas de type JSON c'est que la réponse n'était pas au format JSON, ce que l'on ne traite pas ici
        if (msg is json) {
            //On récupère la citation au format string
            string quote = <string> msg.quote;
            //On envoie le Tweet
            postTweet(quote);
            //On renvoie la citation comme réponse HTTP au demandeur
            var responseRes = caller->respond(<@untainted> quote);
        }
    } else {
        io:println("Erreur lors de la communication avec l'API : ", response.detail()?.message);
    }
}


//Création de notre microservice 
// Qui se situera au endpoint "/" et au port 9000
@http:ServiceConfig {
  basePath: "/"
}
service quote on new http:Listener(9000) {
    //Création de la ressource "Taylor" pour récupérer des citations de Taylor Swift
    //Qui se situera au endpoint "/taylor"
    @http:ResourceConfig {
      path: "/taylor",
      methods: ["GET"]
    } 
    resource function taylorQuote (http:Caller caller, http:Request request) returns @tainted error? {
        //On créé un connecteur à l'API de citation
        http:Client clientE = new ("https://api.taylor.rest");
        getQuote(clientE, caller);
    }

     //Création de la ressource "Kanye" pour récupérer des citations de Kanye West
    //Qui se situera au endpoint "/kanye"
    @http:ResourceConfig {
      path: "/kanye",
      methods: ["GET"]
    } 
    resource function kanyeQuote (http:Caller caller, http:Request request) returns @tainted error? {
        http:Client clientE = new ("https://api.kanye.rest");
        getQuote(clientE, caller);
    }
}

Utilisation

Pour compiler et lancer le programme dans le répertoire où se trouve le fichier .bal, ouvrez un terminal et exécutez la commande suivante :

ballerina run ballerinasaid.bal --b7a.config.file=twitter.toml

Une fois le programme lancé, vous pouvez lancer la publication de tweet en faisant des requêtes HTTP GET vers http://localhost:9000/taylor ou http://localhost:9000/kanye.

Par exemple avec la commande CURL :

curl http://localhost:9000/taylor

Voir Aussi