eservices-tp5: api management

14
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

Upload: lilia-sfaxi

Post on 09-Apr-2017

284 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: eServices-Tp5: api management

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

Page 2: eServices-Tp5: api management

I. Génération d’APIs avec RAMLI.1 RAML RAML‑ (RESTful API Modeling Language) est un langage pour la définition d’API HTTP 1qui 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. Pour 3

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 RAMLPour 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

Page 3: eServices-Tp5: api management

• 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é

Page 4: eServices-Tp5: api management

• 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-ressourcesPour 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 typesPour 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

Page 5: eServices-Tp5: api management

• 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 ressourcesPour 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 ressourcePour 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 exemplePour ajouter un exemple d’animal, modifier le type Pet pour qu’il soit comme suit:

TP 5 ESERVICES MME. LILIA SFAXI �5

Page 6: eServices-Tp5: api management

9. Définir des paramètres pour les méthodesNous 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 librairiePour 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 Studio1. Anypoint PlatformAnypoint est une plateforme développée par l’entreprise Mulesoft qui offre les outils 5

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-integration 5

TP 5 ESERVICES MME. LILIA SFAXI �6

Page 7: eServices-Tp5: api management

2. Première ApplicationUne fois Anypoint Studio téléchargé et installé, créer un nouveau projet, qu’on appellera 6

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

Page 8: eServices-Tp5: api management

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

Page 9: eServices-Tp5: api management

3. Gestion des APIs avec APIKitAPIKit 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

Page 10: eServices-Tp5: api management

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

Page 11: eServices-Tp5: api management

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

Page 12: eServices-Tp5: api management

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

Page 13: eServices-Tp5: api management

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

Page 14: eServices-Tp5: api management

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