VT2020-Ballerina-Demo

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.

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 :

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é. 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 :
 * &rarr; API key
 * &rarr; API secret key
 * &rarr; Access token
 * &rarr; 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, créez un fichier.

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 : ", 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 = 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, ouvrez un terminal et exécutez la commande suivante :

Une fois le programme lancé, vous pouvez lancer la publication de tweet en faisant des requêtes HTTP GET vers  ou.

Par exemple avec la commande CURL :