0% ont trouvé ce document utile (0 vote)
97 vues21 pages

TP 5

Transféré par

k.persik89
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
97 vues21 pages

TP 5

Transféré par

k.persik89
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

09/12/2017 TP5 - TP eServices

TP5 - API Management avec Atom et


Anypoint

Télécharger PDF

[../[Link]]

Objectifs du TP
1. Génération d’API avec Atom et le langage RAML

2. Gestion des APIs avec Anypoint Studio et le API Gateway de Mulesoft

Outils et Versions

[Link] 1/21
09/12/2017 TP5 - TP eServices

Atom [[Link] Version: 1.22.1

API Workbench [[Link] Plugin Atom. Version: 0.8.47

Anypoint Studio [[Link] Version: 6.4.1

MySQL [[Link] Version 5.7.20 (ou tout


autre SGBD de votre choix)

Génération d'API avec RAML


RAML

RAML [[Link] (RESTful API Modeling Language) est un langage


pour la dé nition d’API HTTP qui satisfont les exigences de l'architecture REST.
La spéci cation RAML est une application de la spéci cation YAML, qui fournit
des mécanismes pour la dé nition 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éci cation ouverte,
simple et succincte pour la description d’APIs. Ce groupe de travail contribue à la
fois à la spéci cation RAML, ainsi qu’à un écosystème croissant d’outils autours
de ce langage.

API Workbench

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 [[Link] l'éditeur de
texte open source, appelé API Workbench [[Link]

Pour l’installer:

Télécharger et installer Atom: [Link] [[Link]

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.

[Link] 2/21
09/12/2017 TP5 - TP eServices

Création d’un document RAML

Dans ce qui suit, nous vous indiquons les étapes nécessaires pour créer un
simple chier RAML décrivant une API REST répondant aux recommandations
décrites dans le cours.

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

L’URI de base l’API : /petshop

Cocher uniquement Use RAML 1.0

Le projet obtenu aura l’allure suivante:

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.

[Link] 3/21
09/12/2017 TP5 - TP eServices

Appeler la ressource /pets

Sélectionner les méthodes get et post

La ressource est désormais créée avec deux méthodes vides.

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

Pour la méthode post, générer directement un corps, en cliquant sur Create


new body.

Le résultat apparaît comme suit:

Ajouter des sous-ressources

[Link] 4/21
09/12/2017 TP5 - TP eServices

Pour dé nir 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

Dé nir des types

Pour dé nir le contenu des messages JSON manipulés, dé nir 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é nir les propriétés name, kind et price, comme
suit:

types: 
Pet:
properties:
name: string
kind: string
price: number

Dé nir 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.

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 (si vous ne la trouvez pas, appuyer sur
entrée)

[Link] 5/21
09/12/2017 TP5 - TP eServices

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é nies 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.

Le résultat devra ressembler à ce qui suit:

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’a chent dans les ressources Collection et Member
respectivement par { Collection: {item : Pet} } et { Member: {item :
Pet} }

Ajout d’un exemple

[Link] 6/21
09/12/2017 TP5 - TP eServices

Pour ajouter un exemple d’animal, modi er le type Pet pour qu’il soit comme suit:

types: 
Pet:
properties:
name: string
kind: string
price: number
example:
name: Snoopy
kind: Dog
price: 1000

Dé nir des paramètres pour les méthodes

Nous nous proposons d’ajouter une autre méthode de type get, qui dé nit
plusieurs paramètres.

Sous (et au même niveau que) 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, dog]

Cela devra ressembler à ce qui suit:

get: 
queryParameters:
priceLessThan: number
priceMoreThan: number
petKind:
enum:
- bird
- dog

Il est possible d’extraire certains des paramètres comme Trait, c’est à dire un
critère de ltrage. Pour cela:

[Link] 7/21
09/12/2017 TP5 - TP eServices

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].

Voici donc le résultat nal du chier RAML:

#%RAML 1.0 
traits:
FiltrableByPrice:
queryParameters:
priceLessThan: number
priceMoreThan: number
resourceTypes:
Collection:
get:
responses:
200:
body:
application/json:
type: <<item>>
post:
body:
application/json:
type: <<item>>
Member:
delete:
responses:
204:
put:
body:
application/json:
type: <<item>>
title: Pet Shop
version: v1
baseUri: /petshop
types:
Pet:
properties:
name: string
kind: string
price: number

[Link] 8/21
09/12/2017 TP5 - TP eServices

example:
name: Snoopy
kind: Dog
price: 1000
/pets:
type: { Collection: {item : Pet} }
get:
queryParameters:
petKind:
enum:
- bird
- dog
is: [FiltrableByPrice]
/{id}:
type: { Member: {item : Pet} }

Extraction de la librairie

Pour extraire les types dé nis 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 chier contenant les trois types sélectionnés a été créé, puis inclus
comme référence dans notre chier principal.

API Management avec Anypoint Studio

Anypoint Platform

Anypoint [[Link] est une


plateforme développée par l’entreprise Mulesoft qui offre les outils 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.

[Link] 9/21
09/12/2017 TP5 - TP eServices

Première Application

Une fois Anypoint Studio téléchargé et installé, créer un nouveau projet, qu’on
appellera PremiereApplication, et choisir Mule Server comme Runtime
Environment.
La fenêtre obtenue a l’allure suivante:

[Link] 10/21
09/12/2017 TP5 - TP eServices

 Attention
Anypoint Studio version 6.4.1 ne fonctionne qu'avec au plus JDK 1.8.0_151!

Nous allons commencer par créer une simple application qui a che un message
dans un navigateur.

À partir de la palette, glisser-déplacer les éléments graphiques suivants dans


le canevas:

HTTP: permet de se connecter aux ressources web via HTTP ou HTTPS.

Set Payload: modi e le message a ché (payload) en "Hello World!".

Votre ux aura l’allure suivante:

Con gurer votre composant HTTP :

[Link] 11/21
09/12/2017 TP5 - TP eServices

Ajouter une nouvelle Connector Con guration

Garder les options par défaut. Votre hôte se lancera à l’URL [Link]:8081

Con gurer le composant Set Payload:

Remplacer la valeur de l’élément Value par Hello World!

Lancer votre application : Run -> Run As -> Mule Application. La console
devrait a cher un message comme suit:

Dans un navigateur, taper l'adresse: [Link]:8081. Le message suivant devra


s'a cher:

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.

Nous allons pour cela exposer l'API REST que nous avons créé dans le TP
précédent [../tp4/], grâce aux microservices Spring.

CRÉATION D'UN FICHIER RAML POUR LE MICROSERVICE

[Link] 12/21
09/12/2017 TP5 - TP eServices

Pour représenter le microservice "ProductService", créer le chier [Link]


suivant avec Atom:

#%RAML 1.0 
title: Micro-API
version: v1
baseUri: [Link]
/products:
get:
description: List of all the products
responses:
200:
body:
application/json:
example: !include [Link]

Rajouter également (dans le même répertoire) un chier [Link],


où vous allez trouver un exemple de produits, tel qu'ils sont représentés par votre
service sur [Link] . Cela devrait
ressembler à ce qui suit:

{ 
"_embedded": {
"products": [
{
"name": "Sample Product",
"_links": {
"self": {
"href": "[Link]
},
"product": {
"href": "[Link]
}
}
}
]
},
"_links": {
"self": {
"href": "[Link]
"templated": true
},
"profile": {
"href": "[Link]
},

[Link] 13/21
09/12/2017 TP5 - TP eServices

"search": {
"href": "[Link]
}
},
"page": {
"size": 20,
"totalElements": 3,
"totalPages": 1,
"number": 0
}
}

NOUVEAU PROJET DE API MANAGEMENT

Créer un nouveau projet qu’on appellera API_Project:

Choisir comme environnement d’exécution Mule Server.

Cocher la case Add APIKit components et entrer votre chier [Link].

Un nouveau projet sera créé avec les chiers [Link] et [Link]


ajouté sous le répertoire src/main/api, ainsi que des ux de gestion des
différentes méthodes ajoutées par défaut dans le canevas. Vous retrouverez
notamment:

[Link] 14/21
09/12/2017 TP5 - TP eServices

Flux Description Figure

api-main Flux principal, dé nissant un point d’accès


HTTP, un routeur APIKit et une référence à
une stratégie d'exception

action:/ressource:api- Un Backend ow pour chaque paire de


con g ressource/action dans le chier RAML. Par
exemple, get:/products:api-con g
représente l’action get de la ressource
products

Exception Strategy Flux fournis par Studio pour con gurer les
Mapping messages d’erreur dans un format HTTP-
status-code-friendly

CONFIGURATION DU FLUX PRINCIPAL

Dans les propriétés du composant HTTP, dé nir le Path par: /prod-


services/*.

Dans le Connector Con guration, cliquer sur l'icône , puis cliquer sur OK
pour valider le host ([Link]) et le port (8081)

 Remarque
Vous pouvez changer ici le port dé ni par défaut, pour éviter les con its avec vos
microservices.

Lancer le projet comme Mule Project. Une APIKit Console s'a che comme suit:

[Link] 15/21
09/12/2017 TP5 - TP eServices

Pour tester votre API, cliquer par exemple sur le bouton GET devant la ressource
/products. la Console a chera alors la réponse (le produit Sample Product), qui a
été dé nie comme exemple dans le chier RAML de départ.

Pour visualiser le résultat sur le navigateur, taper le chemin de la requête comme


suit:

[Link] 

Vous obtiendrez le résultat suivant:

[Link] 16/21
09/12/2017 TP5 - TP eServices

Mapping de l'API avec votre microservice ProductService

Pour relier votre API créée avec le microservice Proxy (créé dans le TP
précédent), et qui est déployé à l'adresse suivante:

[Link] 

Supprimer le Set Payload du ow : get:/products:api-con g

Ajouter un connecteur HTTP dans la partie Source

Le con gurer comme suit:

Path: /prod-services

Cliquer sur puis sur OK pour valider le hôte et port.

Ajouter un connecteur HTTP dans la partie Process

Le con gurer comme suit:

Devant Connector Con guration, cliquer sur pour ajouter une


nouvelle con guration.

Cela représente les informations du service auquel on va accéder.


Dé nir le Host par localhost, le port par 9999, et le base path par

[Link] 17/21
09/12/2017 TP5 - TP eServices

/product-service

Cliquer sur OK pour valider

Dans la partie URL Settings, dé nir :

Path: /products

Method: Get

Sauvegarder, et lancer le service.

Tester le service sur le navigateur avec l'URL:


[Link] . Vous obtiendrez la liste complète des
produits, tels que retournés par le service ProductService initial, comme suit:

{ 
"_embedded": {
"products": [
{
"name": "Pencil",
"_links": {
"self": {
"href": "[Link]
},
"product": {
"href": "[Link]
}
}
},
{
"name": "Book",
"_links": {
"self": {
"href": "[Link]
},
"product": {
"href": "[Link]
}
}
},
{
"name": "Eraser",
"_links": {
"self": {
"href": "[Link]
},
"product": {

[Link] 18/21
09/12/2017 TP5 - TP eServices

"href": "[Link]
}
}
}
]
},
"_links": {
"self": {
"href": "[Link]
"templated": true
},
"profile": {
"href": "[Link]
},
"search": {
"href": "[Link]
}
},
"page": {
"size": 20,
"totalElements": 3,
"totalPages": 1,
"number": 0
}
}

Transformation du résultat du microservice ProductService

Si vous désirez retourner un résultat différent du Microservice initial, en ne


laissant par exemple que les noms des produits, sans tous les autres éléments
et liens supplémentaires, utiliser un objet Transform Message

Copier le ow get:/products pour créer un autre ow identique

Modi er le Path du connecteur HTTP source, pour /prod-services/names

Rajouter un objet Transform Message juste après le connecteur HTTP de


droite (celui de la partie Process). Le ow devra ressembler à ce qui suit:

[Link] 19/21
09/12/2017 TP5 - TP eServices

Con gurer l'objet Transform Message:

L'interface suivante représente les mappings à faire entre les entrées du


service et sa sortie.

Cliquer sur De ne Metadata du payload en entrée (à gauche) gauche)

Cliquer sur Add

Entrer le nom du type en entrée, par exemple products

Indiquer comme type JSON

Indiquer dans la liste déroulante suivante que le chier donné est un


Example, puis choisir le chier [Link] que vous aviez
créé.

Cliquer sur Select. Le schéma du chier donné est chargé dans la partie
Input de Transform Message.

Pour représenter le format de sortie désiré, créer un chier appelé


[Link] à l'endroit de votre préférence sur votre ordinateur.

Saisir le contenu suivant dans [Link]:

{"name":"prod"} 

[Link] 20/21
09/12/2017 TP5 - TP eServices

Cliquer sur De ne Metadata de sortie (à droite).

Ajouter un nouveau type que vous appellerez names

Dé nir comme type Json et charger le chier [Link] que vous


venez de créer.

Valider.

Maintenant que les deux schémas (entrée et sortie) sont dé nis, créer
les associations de votre choix. Dans notre cas, nous allons associer le
champ _embedded.[Link] en entrée au champ name en sortie,
comme suit:

Sauvegarder, et lancer le service.

Pour tester le service, lancer dans un navigateur: [Link]


services/names . Vous obtiendrez le résultat suivant:

{ 
"name": [
"Pencil",
"Book",
"Eraser"
]
}

[Link] 21/21

Vous aimerez peut-être aussi