SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
TP 5:API Management avec
Atom et Anypoint(MuleSoft)
Cours eServices - GL5
GL5 - 2015-2016

TP 5 ESERVICES MME. LILIA SFAXI 1
Objectifs du TP
Génération d’API avec Atom et le langage RAML, et gestion des API avec Anypoint
Studio et le API Gateway de Mulesoft
I. Génération d’APIs avec RAML
I.1 RAML
RAML‑ (RESTful API Modeling Language) est un langage pour la définition d’API HTTP1
qui satisfont les exigences de REST. La spécification RAML est une application de la
spécification YAML qui fournit des mécanismes pour la définition d’APIs RESTful.
RAML est développé et supporté par un groupe de leaders en nouvelles technologie,
provenant de plusieurs entreprises éminentes (Mulesoft, Airware, Akana, VMware,
CISCO…). Leur but est de construire une spécification ouverte, simplet et succincte pour
la description d’APIs. Ce groupe de travail contribue à la fois à la spécification RAML,
ainsi qu’à un écosystème croissant d’outils autours de ce langage.
I.2 Outil : API Workbench2
Pour écrire un document RAML de manière simple et intuitive, un outil de travail est
fourni, sous la forme d’un plugin pour Atom , un éditeur de texte open source. Pour3
l’installer:
• Télécharger et installer Atom: https://atom.io/
• Dans le menu Préférences, choisir l’option Packages, et taper dans la barre de
recherche: api-workbench
• Une fois le package installé, on devrait trouver dans le menu Packages, un nouvel
élément API Workbench.
I.3 Création d’un document RAML4
Dans ce qui suit, nous vous indiquons les étapes nécessaires pour créer un simple
fichier RAML décrivant une API REST répondant aux recommandations décrites dans le
cours.
1. Création d’une API RAML
Pour créer un nouveau projet RAML, aller vers Packages -> API Workbench -> Create
RAML Project . Indiquer :
• Le répertoire de travail
• Le titre de l’API : Par exemple Pet Shop
• La version : v1
RAML: http://docs.raml.org/1
API Workbench: http://apiworkbench.com/2
Atom: https://atom.io/3
Ce tutoriel est issu de : http://apiworkbench.com/docs/4
TP 5 ESERVICES MME. LILIA SFAXI 2
• L’URI de base l’API : /petshop
• Cocher uniquement Use RAML 1.0
Le projet obtenu aura l’allure suivante:
2. Ajout de Ressources et Méthodes
• Sous l’onglet Palette de la rubrique Détails, cliquer sur Add new ressource pour ajouter
une nouvelle ressource.
• Appeler la ressource /pets
• Sélectionner les méthodes get et post
La ressource est désormais créée avec deux méthodes vides.
3. Remplir les corps et réponses des méthodes
• Mettre le focus sur la méthode get:
• Dans la Palette, cliquer sur Create new response
• Garder le code 200 pour la réponse et cliquer sur OK
• Une fois le code de la réponse généré, mettre le focus sur 200:
• Cliquer sur Create new Response Body, puis dans la fenêtre qui apparait cliquer sur
OK, pour générer une réponse de type par défaut application/json
TP 5 ESERVICES MME. LILIA SFAXI 3
Structure du
répertoire du
projet
Contenu du
fichier
principal
Structure de
l’élément
sélectionné
Détails et opérations sur
l’élément sélectionné
• Pour la méthode post, générer directement un corps, en cliquant sur Create new body.
Le résultat apparaît comme suit:
4. Ajouter des Sous-ressources
Pour définir le reste des méthodes (put et delete), destinées à agir sur un élément unique
de la ressource pets, et les associer à une sous-ressource:
• Mettre le focus sur /pets
• Cliquer sur Add new resource
• Taper /{id} comme ressource URL, et sélectionner les méthodes put et delete.
• Ajouter un body à put de type application/json
• Ajouter une réponse à delete de type 204
5. Définir des types
Pour définir le contenu des messages JSON manipulés, définir un type comme suit:
• Dans une nouvelle ligne au dessus de /pets, taper ty, puis cliquer sur entrée
• Appeler le type Pet, puis définir les propriétés name, kind et price, comme suit:
TP 5 ESERVICES MME. LILIA SFAXI 4
• Définir Pet comme type pour le corps de la méthode post, en écrivant: type:Pet au
dessous de application/json de la méthode post
• Ajouter de même Pet comme type pour la méthode put, et Pet[] pour la méthode get.
6. Extraction d’un type de ressources
Pour générer un type de ressources à partir d’une ressource existante:
• Mettre le focus sur la ressource /pets
• Cliquer sur Extract Resource Type
• Taper Collection comme nom de type de ressource et déplacer les méthodes get et
post de la fenêtre de gauche vers celle de droite
• Un nouveau resourceType, appelé Collection, est créé, contenant les méthodes get et
post comme elles ont été définies sous la ressource /pets. De plus, /pets est
désormais de type Collection.
• Répéter la procédure pour la ressource /{id}. On appellera le type Member
7. Ajout de paramètres au type de ressource
Pour rendre le type de ressource créé générique, il serait plus intéressant de paramétrer
le type de réponse. Pour cela:
• Remplacer le terme Pet dans Collection et Member par <<item>>.
• Corriger les erreurs qui s’affichent dans les ressources Collection et Member
respectivement par { Collection: {item : Pet} } et { Member: {item : Pet} }
8. Ajout d’un exemple
Pour ajouter un exemple d’animal, modifier le type Pet pour qu’il soit comme suit:
TP 5 ESERVICES MME. LILIA SFAXI 5
9. Définir des paramètres pour les méthodes
Nous nous proposons d’ajouter une autre méthode de type get, qui définit plusieurs
paramètres.
• Sous type de /pets, taper: get:
• Mettre le focus sur le get nouvellement créé
• Cliquer sur Create new query parameter
• Créer trois paramètres:
❖ priceLessThan de type number
❖ priceMoreThan de type number
❖ petKind, de type enum;[bird, mammal]
• Il est possible d’extraire certains des paramètres comme Trait, c’est à dire un critère de
filtrage. Pour cela,
❖ Mettre le focus sur le get;
❖ Cliquer sur Extract trait
❖ Nommer le trait FiltrableByPrice, et déplacer les méthodes priceLessThan et
priceMoreThan vers la droite
Vous remarquerez que les deux paramètres choisis ont été enlevés de la méthode get, et
remplacés par is: FilterableByPrice.
10.Extraction de la librairie
Pour extraire les types définis et les représenter dans une entité réutilisable:
• Mettre le focus en dehors de toutes les structures, par exemple sur title
• Cliquer sur Extract Library
• Appeler la librarie PetTypes
• Déplacer Pet, Collection et Member vers le panel de droite
• Cliquer sur Extract
Un nouveau fichier contenant les trois types sélectionnés a été créé, puis inclus comme
référence dans notre fichier principal.
I.4 API Management avec Anypoint Studio
1. Anypoint Platform
Anypoint est une plateforme développée par l’entreprise Mulesoft qui offre les outils5
nécessaires pour la gestion d’APIs. Anypoint est classée par Gartner dans son Magic
Quadrant dans la rubrique “Application Services Governance” d’Avril 2015 parmi les
leaders du marché du API Management.
Anypoint Platform: https://www.mulesoft.com/platform/enterprise-integration5
TP 5 ESERVICES MME. LILIA SFAXI 6
2. Première Application
Une fois Anypoint Studio téléchargé et installé, créer un nouveau projet, qu’on appellera6
Premiere Application, et choisir Mule Server comme Runtime Environment.
La fenêtre obtenue a l’allure suivante:
Anypoint Studio: https://docs.mulesoft.com/mule-fundamentals/v/3.7/download-and-launch-anypoint-6
studio
TP 5 ESERVICES MME. LILIA SFAXI 7
Structure du
projet
Canevas pour construire le flux de
traitement en faisant un glisser
déplacer des composants
Palette des
composants
graphiques à
intégrer
Propriétés des composants
sélectionnés dans le canevas
Nous allons commencer par créer une simple application qui affiche un message dans
un navigateur.
À partir de la palette, glisser-déplacer les éléments graphiques suivants dans le
canevas:
• HTTP Connector: permet de se connecter aux ressources web via HTTP ou HTTPS.
• Set Payload Transformer: Modifie le message affiché (payload) en “Hello World!”.
Votre flux aura l’allure suivante:
Configurer votre HTTP Connector:
• Ajouter une nouvelle Connector Configuration
• Garder les options par défaut. Votre hôte se lancera à l’URL 0.0.0.0:8081
Configurer le composant Set Payload. Remplacer pour cela la valeur de l’élément Value
par Hello World!
Lancer votre application : Run -> Run As -> Mule Application. La console devrait afficher
un message comme suit:
Dans un navigateur, taper l’adresse: 0.0.0.0:8081. Le message suivant devrait d’afficher:
TP 5 ESERVICES MME. LILIA SFAXI 8
3. Gestion des APIs avec APIKit
APIKit est un toolkit open source spécialement créé pour faciliter l’implémentation d’APIs
REST, en renforçant les bonnes pratiques de création d’APIs.
L’exemple suivant est tiré de la documentation officielle de Mulesoft (https://
docs.mulesoft.com/anypoint-platform-for-apis/apikit-tutorial). Elle suppose que Anypoint
Studio est installé et un API Gateway configuré (voir la section Download and Install the
Gateway Runtime du tutoriel).
Nous allons utiliser un fichier RAML prédéfini api.raml (téléchargé ici: https://
docs.mulesoft.com/anypoint-platform-for-apis/_attachments/api.raml).
a. Nouveau Projet de API Management
Créer un nouveau projet qu’on appellera API Project:
• Choisir comme environnement d’exécution le API Gateway que vous avez installé
• Cocher la case Add APIKit components et entrer le fichier RAML que vous avez
téléchargé.
Un nouveau projet sera créé avec le fichier api.raml ajouté sous le répertoire src/main/
api, ainsi que des flux de gestion des différentes méthodes ajoutées par défaut dans le
canevas. Vous retrouverez notamment:
TP 5 ESERVICES MME. LILIA SFAXI 9
b. Configuration du flux principal
• Dans les propriétés du HTTP Connector, définir:
★ Host: localhost
★ Port: 8081
★ Base Path: /remote-vending
c. Lancement du projet
Lancer le projet comme Mule Application. Une APIKit Console s’affiche :
Flux Description Figure
api-main Flux principal, définissant un point
d’accès HTTP, un routeur APIKit une
référence à une stratégie d'exception
action:/
ressource:
apiConfig
Un Backend flow pour chaque paire de
ressource/action dans le fichier RAML.
Par exemple, get:/sales:apiConfig
représente l’action get de la ressource
sales
Exception
Strategy
Mapping
Flux fournis par Studio pour configurer
les messages d’erreur dans un format
HTTP-status-code-friendly
!
TP 5 ESERVICES MME. LILIA SFAXI 10
Pour tester votre API, cliquer par exemple sur le bouton GET devant la ressource /sales.
la Console affichera alors la réponse (une liste de sales), qui a été définie comme
exemple dans le fichier RAML de départ.
TP 5 ESERVICES MME. LILIA SFAXI 11
Pour visualiser le résultat sur le navigateur, taper le chemin de la requête comme suit:
http://localhost:8081/remote-vending/api/sales
Une réponse JSON s’affichera:
4. Mapping d’une API avec une base de données en backend
Nous allons tester un exemple simple pour mapper l’API que nous avons défini à une
table de la base de données, par exemple pour la méthode get de la ressource sales.
a. Création de la base de données
Dans l’exemple, j’utilise MYSQL pour créer la base de données, mais vous pouvez
choisir le SGBD de votre choix.
Nous allons commencer par créer la base de données vendingMachineAPI, dans
laquelle nous allons créer une table sales comme suit:
create table sales(id int primary key,date Date, value int,
machineID text, productID text);
Insérer dans la table sales un enregistrement, comme suit:
insert into sales values (1, '15/12/08', 100, '2', '3');
b. Création du flux de lecture
Pour définir un flux de lecture à partir de la base de données pour la méthode GET de la
ressource sales, modifier le flux get:/sales:api-config comme suit:
• Supprimer le composant Set Payload défini par défaut
• Insérer deux composants Database et Transform Message de manière à obtenir le flux
suivant:
TP 5 ESERVICES MME. LILIA SFAXI 12
c. Configuration de la base de données
Pour configurer le composant Database:
• Ajouter une nouvelle Connector configuration
• Choisir MySQL Configuration
• Remplir les champs pour la configuration de votre base de données. Par défaut:
★ Host: localhost
★ Port: 3306
★ User: utilisateur_de_mysql
★ Password: mot_de_passe_de_mysql
★ Database: vendingMachineAPI
• Ajouter le driver MySQL (fourni par votre enseignante)
• En revenant sur la fenêtre des propriétés du composant Database, choisir l’opération
SELECT
• Taper ensuite la requête:
select * from sales;
d. Mapping de la requête avec la réponse JSON
Pour mapper les enregistrements lus à partir de la base de données avec la réponse
JSON retournée par la méthode GET, il faut configurer le composant de mapping
Transform Message. Dans les propriétés de ce composant, on retrouvera les formats des
deux parties à mapper: la table de la base de données, ainsi que le schéma JSON à
retourner:
TP 5 ESERVICES MME. LILIA SFAXI 13
Pour associer le contenu de la table avec le format de retour, glisser-déplacer chacun
des éléments de la table sales avec l’élément correspondant du schéma JSON.
e. Résultat
Lancer le projet. Dans la console, cliquer sur Get de la ressource /sales. Ce qui s’affiche
ici comme résultat représente les exemples fournis dans le fichier RAML, pas le contenu
de la base. Pour afficher le résultat de lecture à partir de la base vendingMachineAPI,
cliquer sur Try it en haut à droite de la fenêtre, puis sur GET. Le résultat suivant devrait
apparaître:
TP 5 ESERVICES MME. LILIA SFAXI 14

Contenu connexe

Tendances

Architectures orientées services
Architectures orientées servicesArchitectures orientées services
Architectures orientées servicesDonia Hammami
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionLilia Sfaxi
 
Architectures orientés services (SOA)
Architectures orientés services (SOA)Architectures orientés services (SOA)
Architectures orientés services (SOA)Heithem Abbes
 
Cours Génie Logiciel - Cours 2 - Cycles de vie
Cours Génie Logiciel - Cours 2 - Cycles de vieCours Génie Logiciel - Cours 2 - Cycles de vie
Cours Génie Logiciel - Cours 2 - Cycles de vieMohammed Amine Mostefai
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API RESTAbdoulaye Dieng
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiENSET, Université Hassan II Casablanca
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...ENSET, Université Hassan II Casablanca
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web ServicesLilia Sfaxi
 
Android-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursAndroid-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursLilia Sfaxi
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyENSET, Université Hassan II Casablanca
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRSLilia Sfaxi
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring BatchAntoine Rey
 
Java Server Faces (JSF)
Java Server Faces (JSF)Java Server Faces (JSF)
Java Server Faces (JSF)Heithem Abbes
 
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...ENSET, Université Hassan II Casablanca
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesLilia Sfaxi
 
API : l'architecture REST
API : l'architecture RESTAPI : l'architecture REST
API : l'architecture RESTFadel Chafai
 

Tendances (20)

Présentation SOA
Présentation SOAPrésentation SOA
Présentation SOA
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
Architectures orientées services
Architectures orientées servicesArchitectures orientées services
Architectures orientées services
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
 
Architectures orientés services (SOA)
Architectures orientés services (SOA)Architectures orientés services (SOA)
Architectures orientés services (SOA)
 
Cours Génie Logiciel - Cours 2 - Cycles de vie
Cours Génie Logiciel - Cours 2 - Cycles de vieCours Génie Logiciel - Cours 2 - Cycles de vie
Cours Génie Logiciel - Cours 2 - Cycles de vie
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 
Android-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursAndroid-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateurs
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring Batch
 
Java Server Faces (JSF)
Java Server Faces (JSF)Java Server Faces (JSF)
Java Server Faces (JSF)
 
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées Services
 
API : l'architecture REST
API : l'architecture RESTAPI : l'architecture REST
API : l'architecture REST
 

En vedette

eServices-Chp2: SOA
eServices-Chp2: SOAeServices-Chp2: SOA
eServices-Chp2: SOALilia Sfaxi
 
eServices-Chp3: Composition de Services
eServices-Chp3: Composition de ServiceseServices-Chp3: Composition de Services
eServices-Chp3: Composition de ServicesLilia Sfaxi
 
eServices-Chp6: WOA
eServices-Chp6: WOAeServices-Chp6: WOA
eServices-Chp6: WOALilia Sfaxi
 
eServices-Chp4: ESB
eServices-Chp4: ESBeServices-Chp4: ESB
eServices-Chp4: ESBLilia Sfaxi
 
eServices-Chp1: Introduction
eServices-Chp1: IntroductioneServices-Chp1: Introduction
eServices-Chp1: IntroductionLilia Sfaxi
 
eServices-Chp5: Microservices et API Management
eServices-Chp5: Microservices et API ManagementeServices-Chp5: Microservices et API Management
eServices-Chp5: Microservices et API ManagementLilia Sfaxi
 
eServices-Tp4: esb++
eServices-Tp4: esb++eServices-Tp4: esb++
eServices-Tp4: esb++Lilia Sfaxi
 
eServices-Tp2: bpel
eServices-Tp2: bpeleServices-Tp2: bpel
eServices-Tp2: bpelLilia Sfaxi
 
eServices-Tp3: esb
eServices-Tp3: esbeServices-Tp3: esb
eServices-Tp3: esbLilia Sfaxi
 
Getting Started with Real-time Analytics
Getting Started with Real-time AnalyticsGetting Started with Real-time Analytics
Getting Started with Real-time AnalyticsAmazon Web Services
 
Real Time Analytics: Algorithms and Systems
Real Time Analytics: Algorithms and SystemsReal Time Analytics: Algorithms and Systems
Real Time Analytics: Algorithms and SystemsArun Kejariwal
 
Big Data Real Time Applications
Big Data Real Time ApplicationsBig Data Real Time Applications
Big Data Real Time ApplicationsDataWorks Summit
 

En vedette (12)

eServices-Chp2: SOA
eServices-Chp2: SOAeServices-Chp2: SOA
eServices-Chp2: SOA
 
eServices-Chp3: Composition de Services
eServices-Chp3: Composition de ServiceseServices-Chp3: Composition de Services
eServices-Chp3: Composition de Services
 
eServices-Chp6: WOA
eServices-Chp6: WOAeServices-Chp6: WOA
eServices-Chp6: WOA
 
eServices-Chp4: ESB
eServices-Chp4: ESBeServices-Chp4: ESB
eServices-Chp4: ESB
 
eServices-Chp1: Introduction
eServices-Chp1: IntroductioneServices-Chp1: Introduction
eServices-Chp1: Introduction
 
eServices-Chp5: Microservices et API Management
eServices-Chp5: Microservices et API ManagementeServices-Chp5: Microservices et API Management
eServices-Chp5: Microservices et API Management
 
eServices-Tp4: esb++
eServices-Tp4: esb++eServices-Tp4: esb++
eServices-Tp4: esb++
 
eServices-Tp2: bpel
eServices-Tp2: bpeleServices-Tp2: bpel
eServices-Tp2: bpel
 
eServices-Tp3: esb
eServices-Tp3: esbeServices-Tp3: esb
eServices-Tp3: esb
 
Getting Started with Real-time Analytics
Getting Started with Real-time AnalyticsGetting Started with Real-time Analytics
Getting Started with Real-time Analytics
 
Real Time Analytics: Algorithms and Systems
Real Time Analytics: Algorithms and SystemsReal Time Analytics: Algorithms and Systems
Real Time Analytics: Algorithms and Systems
 
Big Data Real Time Applications
Big Data Real Time ApplicationsBig Data Real Time Applications
Big Data Real Time Applications
 

Similaire à eServices-Tp5: api management

Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Cédric Leblond
 
Présentation de gplus to-twitter
Présentation de gplus to-twitterPrésentation de gplus to-twitter
Présentation de gplus to-twitterFabien Baligand
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sqlcecile59
 
Enrichir vos contenus Wordpress avec les API - WPTech 2015
Enrichir vos contenus Wordpress avec les API - WPTech 2015Enrichir vos contenus Wordpress avec les API - WPTech 2015
Enrichir vos contenus Wordpress avec les API - WPTech 2015PXNetwork
 
Reporting avec JasperServer & iReport
Reporting avec JasperServer & iReportReporting avec JasperServer & iReport
Reporting avec JasperServer & iReportLilia Sfaxi
 
Codathlon Google App Engine
Codathlon Google App EngineCodathlon Google App Engine
Codathlon Google App EngineVincentBostoen
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec OdooHassan WAHSISS
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPkemenaran
 
Asp Au Service Des Mv Ps
Asp Au Service Des Mv PsAsp Au Service Des Mv Ps
Asp Au Service Des Mv PsGregory Renard
 
Développement d’extensions WordPress
Développement d’extensions WordPressDéveloppement d’extensions WordPress
Développement d’extensions WordPressChi Nacim
 
Cas integration open_erp
Cas integration open_erpCas integration open_erp
Cas integration open_erpJoubi Aaziz
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web servicesLilia Sfaxi
 
Formation Efficy CRM - Technical training
Formation Efficy CRM - Technical trainingFormation Efficy CRM - Technical training
Formation Efficy CRM - Technical trainingEfficy CRM
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSyrine Ben aziza
 
Procédure de configuration et préparation de l’environnement sous windows
Procédure de configuration et préparation de l’environnement sous windowsProcédure de configuration et préparation de l’environnement sous windows
Procédure de configuration et préparation de l’environnement sous windowsAddi Ait-Mlouk
 
Installation configuration OpenERP 7 - Windows
Installation   configuration OpenERP 7 - WindowsInstallation   configuration OpenERP 7 - Windows
Installation configuration OpenERP 7 - WindowsSanae BEKKAR
 

Similaire à eServices-Tp5: api management (20)

Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !
 
Présentation de gplus to-twitter
Présentation de gplus to-twitterPrésentation de gplus to-twitter
Présentation de gplus to-twitter
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
 
Enrichir vos contenus Wordpress avec les API - WPTech 2015
Enrichir vos contenus Wordpress avec les API - WPTech 2015Enrichir vos contenus Wordpress avec les API - WPTech 2015
Enrichir vos contenus Wordpress avec les API - WPTech 2015
 
Crud+tutorial+fr
Crud+tutorial+frCrud+tutorial+fr
Crud+tutorial+fr
 
Reporting avec JasperServer & iReport
Reporting avec JasperServer & iReportReporting avec JasperServer & iReport
Reporting avec JasperServer & iReport
 
Formation cakephp
Formation cakephpFormation cakephp
Formation cakephp
 
Codathlon Google App Engine
Codathlon Google App EngineCodathlon Google App Engine
Codathlon Google App Engine
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec Odoo
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Mysql
MysqlMysql
Mysql
 
Asp Au Service Des Mv Ps
Asp Au Service Des Mv PsAsp Au Service Des Mv Ps
Asp Au Service Des Mv Ps
 
Développement d’extensions WordPress
Développement d’extensions WordPressDéveloppement d’extensions WordPress
Développement d’extensions WordPress
 
Cas integration open_erp
Cas integration open_erpCas integration open_erp
Cas integration open_erp
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
Formation Efficy CRM - Technical training
Formation Efficy CRM - Technical trainingFormation Efficy CRM - Technical training
Formation Efficy CRM - Technical training
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
 
Procédure de configuration et préparation de l’environnement sous windows
Procédure de configuration et préparation de l’environnement sous windowsProcédure de configuration et préparation de l’environnement sous windows
Procédure de configuration et préparation de l’environnement sous windows
 
Installation configuration OpenERP 7 - Windows
Installation   configuration OpenERP 7 - WindowsInstallation   configuration OpenERP 7 - Windows
Installation configuration OpenERP 7 - Windows
 

Plus de Lilia Sfaxi

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfLilia Sfaxi
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfLilia Sfaxi
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-CassandraLilia Sfaxi
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-CorrectionLilia Sfaxi
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-CorrectionLilia Sfaxi
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-CorrectionLilia Sfaxi
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-CorrectionLilia Sfaxi
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-SéquencesLilia Sfaxi
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-CorrectionLilia Sfaxi
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - CorrectionLilia Sfaxi
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correctionLilia Sfaxi
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrageLilia Sfaxi
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Lilia Sfaxi
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intentsLilia Sfaxi
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésLilia Sfaxi
 
Android - Tp 5 - stockage de données
Android - Tp 5 -  stockage de donnéesAndroid - Tp 5 -  stockage de données
Android - Tp 5 - stockage de donnéesLilia Sfaxi
 

Plus de Lilia Sfaxi (20)

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdf
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdf
 
Lab3-DB_Neo4j
Lab3-DB_Neo4jLab3-DB_Neo4j
Lab3-DB_Neo4j
 
Lab2-DB-Mongodb
Lab2-DB-MongodbLab2-DB-Mongodb
Lab2-DB-Mongodb
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-Cassandra
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-Correction
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-Correction
 
TD4-UML
TD4-UMLTD4-UML
TD4-UML
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-Séquences
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-Correction
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - Correction
 
TD1 - UML - DCU
TD1 - UML - DCUTD1 - UML - DCU
TD1 - UML - DCU
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correction
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrage
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intents
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancés
 
Android - Tp 5 - stockage de données
Android - Tp 5 -  stockage de donnéesAndroid - Tp 5 -  stockage de données
Android - Tp 5 - stockage de données
 

eServices-Tp5: api management

  • 1. TP 5:API Management avec Atom et Anypoint(MuleSoft) Cours eServices - GL5 GL5 - 2015-2016
 TP 5 ESERVICES MME. LILIA SFAXI 1 Objectifs du TP Génération d’API avec Atom et le langage RAML, et gestion des API avec Anypoint Studio et le API Gateway de Mulesoft
  • 2. I. Génération d’APIs avec RAML I.1 RAML RAML‑ (RESTful API Modeling Language) est un langage pour la définition d’API HTTP1 qui satisfont les exigences de REST. La spécification RAML est une application de la spécification YAML qui fournit des mécanismes pour la définition d’APIs RESTful. RAML est développé et supporté par un groupe de leaders en nouvelles technologie, provenant de plusieurs entreprises éminentes (Mulesoft, Airware, Akana, VMware, CISCO…). Leur but est de construire une spécification ouverte, simplet et succincte pour la description d’APIs. Ce groupe de travail contribue à la fois à la spécification RAML, ainsi qu’à un écosystème croissant d’outils autours de ce langage. I.2 Outil : API Workbench2 Pour écrire un document RAML de manière simple et intuitive, un outil de travail est fourni, sous la forme d’un plugin pour Atom , un éditeur de texte open source. Pour3 l’installer: • Télécharger et installer Atom: https://atom.io/ • Dans le menu Préférences, choisir l’option Packages, et taper dans la barre de recherche: api-workbench • Une fois le package installé, on devrait trouver dans le menu Packages, un nouvel élément API Workbench. I.3 Création d’un document RAML4 Dans ce qui suit, nous vous indiquons les étapes nécessaires pour créer un simple fichier RAML décrivant une API REST répondant aux recommandations décrites dans le cours. 1. Création d’une API RAML Pour créer un nouveau projet RAML, aller vers Packages -> API Workbench -> Create RAML Project . Indiquer : • Le répertoire de travail • Le titre de l’API : Par exemple Pet Shop • La version : v1 RAML: http://docs.raml.org/1 API Workbench: http://apiworkbench.com/2 Atom: https://atom.io/3 Ce tutoriel est issu de : http://apiworkbench.com/docs/4 TP 5 ESERVICES MME. LILIA SFAXI 2
  • 3. • L’URI de base l’API : /petshop • Cocher uniquement Use RAML 1.0 Le projet obtenu aura l’allure suivante: 2. Ajout de Ressources et Méthodes • Sous l’onglet Palette de la rubrique Détails, cliquer sur Add new ressource pour ajouter une nouvelle ressource. • Appeler la ressource /pets • Sélectionner les méthodes get et post La ressource est désormais créée avec deux méthodes vides. 3. Remplir les corps et réponses des méthodes • Mettre le focus sur la méthode get: • Dans la Palette, cliquer sur Create new response • Garder le code 200 pour la réponse et cliquer sur OK • Une fois le code de la réponse généré, mettre le focus sur 200: • Cliquer sur Create new Response Body, puis dans la fenêtre qui apparait cliquer sur OK, pour générer une réponse de type par défaut application/json TP 5 ESERVICES MME. LILIA SFAXI 3 Structure du répertoire du projet Contenu du fichier principal Structure de l’élément sélectionné Détails et opérations sur l’élément sélectionné
  • 4. • Pour la méthode post, générer directement un corps, en cliquant sur Create new body. Le résultat apparaît comme suit: 4. Ajouter des Sous-ressources Pour définir le reste des méthodes (put et delete), destinées à agir sur un élément unique de la ressource pets, et les associer à une sous-ressource: • Mettre le focus sur /pets • Cliquer sur Add new resource • Taper /{id} comme ressource URL, et sélectionner les méthodes put et delete. • Ajouter un body à put de type application/json • Ajouter une réponse à delete de type 204 5. Définir des types Pour définir le contenu des messages JSON manipulés, définir un type comme suit: • Dans une nouvelle ligne au dessus de /pets, taper ty, puis cliquer sur entrée • Appeler le type Pet, puis définir les propriétés name, kind et price, comme suit: TP 5 ESERVICES MME. LILIA SFAXI 4
  • 5. • Définir Pet comme type pour le corps de la méthode post, en écrivant: type:Pet au dessous de application/json de la méthode post • Ajouter de même Pet comme type pour la méthode put, et Pet[] pour la méthode get. 6. Extraction d’un type de ressources Pour générer un type de ressources à partir d’une ressource existante: • Mettre le focus sur la ressource /pets • Cliquer sur Extract Resource Type • Taper Collection comme nom de type de ressource et déplacer les méthodes get et post de la fenêtre de gauche vers celle de droite • Un nouveau resourceType, appelé Collection, est créé, contenant les méthodes get et post comme elles ont été définies sous la ressource /pets. De plus, /pets est désormais de type Collection. • Répéter la procédure pour la ressource /{id}. On appellera le type Member 7. Ajout de paramètres au type de ressource Pour rendre le type de ressource créé générique, il serait plus intéressant de paramétrer le type de réponse. Pour cela: • Remplacer le terme Pet dans Collection et Member par <<item>>. • Corriger les erreurs qui s’affichent dans les ressources Collection et Member respectivement par { Collection: {item : Pet} } et { Member: {item : Pet} } 8. Ajout d’un exemple Pour ajouter un exemple d’animal, modifier le type Pet pour qu’il soit comme suit: TP 5 ESERVICES MME. LILIA SFAXI 5
  • 6. 9. Définir des paramètres pour les méthodes Nous nous proposons d’ajouter une autre méthode de type get, qui définit plusieurs paramètres. • Sous type de /pets, taper: get: • Mettre le focus sur le get nouvellement créé • Cliquer sur Create new query parameter • Créer trois paramètres: ❖ priceLessThan de type number ❖ priceMoreThan de type number ❖ petKind, de type enum;[bird, mammal] • Il est possible d’extraire certains des paramètres comme Trait, c’est à dire un critère de filtrage. Pour cela, ❖ Mettre le focus sur le get; ❖ Cliquer sur Extract trait ❖ Nommer le trait FiltrableByPrice, et déplacer les méthodes priceLessThan et priceMoreThan vers la droite Vous remarquerez que les deux paramètres choisis ont été enlevés de la méthode get, et remplacés par is: FilterableByPrice. 10.Extraction de la librairie Pour extraire les types définis et les représenter dans une entité réutilisable: • Mettre le focus en dehors de toutes les structures, par exemple sur title • Cliquer sur Extract Library • Appeler la librarie PetTypes • Déplacer Pet, Collection et Member vers le panel de droite • Cliquer sur Extract Un nouveau fichier contenant les trois types sélectionnés a été créé, puis inclus comme référence dans notre fichier principal. I.4 API Management avec Anypoint Studio 1. Anypoint Platform Anypoint est une plateforme développée par l’entreprise Mulesoft qui offre les outils5 nécessaires pour la gestion d’APIs. Anypoint est classée par Gartner dans son Magic Quadrant dans la rubrique “Application Services Governance” d’Avril 2015 parmi les leaders du marché du API Management. Anypoint Platform: https://www.mulesoft.com/platform/enterprise-integration5 TP 5 ESERVICES MME. LILIA SFAXI 6
  • 7. 2. Première Application Une fois Anypoint Studio téléchargé et installé, créer un nouveau projet, qu’on appellera6 Premiere Application, et choisir Mule Server comme Runtime Environment. La fenêtre obtenue a l’allure suivante: Anypoint Studio: https://docs.mulesoft.com/mule-fundamentals/v/3.7/download-and-launch-anypoint-6 studio TP 5 ESERVICES MME. LILIA SFAXI 7 Structure du projet Canevas pour construire le flux de traitement en faisant un glisser déplacer des composants Palette des composants graphiques à intégrer Propriétés des composants sélectionnés dans le canevas
  • 8. Nous allons commencer par créer une simple application qui affiche un message dans un navigateur. À partir de la palette, glisser-déplacer les éléments graphiques suivants dans le canevas: • HTTP Connector: permet de se connecter aux ressources web via HTTP ou HTTPS. • Set Payload Transformer: Modifie le message affiché (payload) en “Hello World!”. Votre flux aura l’allure suivante: Configurer votre HTTP Connector: • Ajouter une nouvelle Connector Configuration • Garder les options par défaut. Votre hôte se lancera à l’URL 0.0.0.0:8081 Configurer le composant Set Payload. Remplacer pour cela la valeur de l’élément Value par Hello World! Lancer votre application : Run -> Run As -> Mule Application. La console devrait afficher un message comme suit: Dans un navigateur, taper l’adresse: 0.0.0.0:8081. Le message suivant devrait d’afficher: TP 5 ESERVICES MME. LILIA SFAXI 8
  • 9. 3. Gestion des APIs avec APIKit APIKit est un toolkit open source spécialement créé pour faciliter l’implémentation d’APIs REST, en renforçant les bonnes pratiques de création d’APIs. L’exemple suivant est tiré de la documentation officielle de Mulesoft (https:// docs.mulesoft.com/anypoint-platform-for-apis/apikit-tutorial). Elle suppose que Anypoint Studio est installé et un API Gateway configuré (voir la section Download and Install the Gateway Runtime du tutoriel). Nous allons utiliser un fichier RAML prédéfini api.raml (téléchargé ici: https:// docs.mulesoft.com/anypoint-platform-for-apis/_attachments/api.raml). a. Nouveau Projet de API Management Créer un nouveau projet qu’on appellera API Project: • Choisir comme environnement d’exécution le API Gateway que vous avez installé • Cocher la case Add APIKit components et entrer le fichier RAML que vous avez téléchargé. Un nouveau projet sera créé avec le fichier api.raml ajouté sous le répertoire src/main/ api, ainsi que des flux de gestion des différentes méthodes ajoutées par défaut dans le canevas. Vous retrouverez notamment: TP 5 ESERVICES MME. LILIA SFAXI 9
  • 10. b. Configuration du flux principal • Dans les propriétés du HTTP Connector, définir: ★ Host: localhost ★ Port: 8081 ★ Base Path: /remote-vending c. Lancement du projet Lancer le projet comme Mule Application. Une APIKit Console s’affiche : Flux Description Figure api-main Flux principal, définissant un point d’accès HTTP, un routeur APIKit une référence à une stratégie d'exception action:/ ressource: apiConfig Un Backend flow pour chaque paire de ressource/action dans le fichier RAML. Par exemple, get:/sales:apiConfig représente l’action get de la ressource sales Exception Strategy Mapping Flux fournis par Studio pour configurer les messages d’erreur dans un format HTTP-status-code-friendly ! TP 5 ESERVICES MME. LILIA SFAXI 10
  • 11. Pour tester votre API, cliquer par exemple sur le bouton GET devant la ressource /sales. la Console affichera alors la réponse (une liste de sales), qui a été définie comme exemple dans le fichier RAML de départ. TP 5 ESERVICES MME. LILIA SFAXI 11
  • 12. Pour visualiser le résultat sur le navigateur, taper le chemin de la requête comme suit: http://localhost:8081/remote-vending/api/sales Une réponse JSON s’affichera: 4. Mapping d’une API avec une base de données en backend Nous allons tester un exemple simple pour mapper l’API que nous avons défini à une table de la base de données, par exemple pour la méthode get de la ressource sales. a. Création de la base de données Dans l’exemple, j’utilise MYSQL pour créer la base de données, mais vous pouvez choisir le SGBD de votre choix. Nous allons commencer par créer la base de données vendingMachineAPI, dans laquelle nous allons créer une table sales comme suit: create table sales(id int primary key,date Date, value int, machineID text, productID text); Insérer dans la table sales un enregistrement, comme suit: insert into sales values (1, '15/12/08', 100, '2', '3'); b. Création du flux de lecture Pour définir un flux de lecture à partir de la base de données pour la méthode GET de la ressource sales, modifier le flux get:/sales:api-config comme suit: • Supprimer le composant Set Payload défini par défaut • Insérer deux composants Database et Transform Message de manière à obtenir le flux suivant: TP 5 ESERVICES MME. LILIA SFAXI 12
  • 13. c. Configuration de la base de données Pour configurer le composant Database: • Ajouter une nouvelle Connector configuration • Choisir MySQL Configuration • Remplir les champs pour la configuration de votre base de données. Par défaut: ★ Host: localhost ★ Port: 3306 ★ User: utilisateur_de_mysql ★ Password: mot_de_passe_de_mysql ★ Database: vendingMachineAPI • Ajouter le driver MySQL (fourni par votre enseignante) • En revenant sur la fenêtre des propriétés du composant Database, choisir l’opération SELECT • Taper ensuite la requête: select * from sales; d. Mapping de la requête avec la réponse JSON Pour mapper les enregistrements lus à partir de la base de données avec la réponse JSON retournée par la méthode GET, il faut configurer le composant de mapping Transform Message. Dans les propriétés de ce composant, on retrouvera les formats des deux parties à mapper: la table de la base de données, ainsi que le schéma JSON à retourner: TP 5 ESERVICES MME. LILIA SFAXI 13
  • 14. Pour associer le contenu de la table avec le format de retour, glisser-déplacer chacun des éléments de la table sales avec l’élément correspondant du schéma JSON. e. Résultat Lancer le projet. Dans la console, cliquer sur Get de la ressource /sales. Ce qui s’affiche ici comme résultat représente les exemples fournis dans le fichier RAML, pas le contenu de la base. Pour afficher le résultat de lecture à partir de la base vendingMachineAPI, cliquer sur Try it en haut à droite de la fenêtre, puis sur GET. Le résultat suivant devrait apparaître: TP 5 ESERVICES MME. LILIA SFAXI 14