SlideShare une entreprise Scribd logo
1  sur  40
Architecture de services 
web de type ressource 
Antoine Pouch 
Architecte et chef d‘équipe - DataCandy 
design@pouch.name 
https://joind.in/12825
Généralités 
Architecture services web de type ressource – Antoine Pouch 2
Un service web, qu’est-ce? 
• Partage des fonctions entre applications 
• Permettre à des logiciels fonctionnant sur des environnements 
disparates de communiquer 
• Dé-couplage ? 
• Fonctionnel 
• Structurel (de données) 
• Temporel 
• Positionnel (URI) 
Architecture services web de type ressource – Antoine Pouch 3
Les différents types 
Les classiques 
• CORBA 
• DCOM 
Les modernes 
• RPC 
• Message 
• Ressource 
Architecture services web de type ressource – Antoine Pouch 4
Les différents types d'API - RPC 
• Une URL 
• Une signature par méthode 
• SOAP/XML/WSDL usuellement 
Architecture services web de type ressource – Antoine Pouch 5
Les différents types d'API- Message 
• Une URL 
• Une signature pour toutes une famille de méthodes avec un 
paramètre unique qui diffère 
• SOAP/XML/WSDL usuellement 
Architecture services web de type ressource – Antoine Pouch 6
Les différents types d'API- Ressource 
• Une URL par ressource, par action 
• Signatures proches, faciles à « deviner » 
• Pas toutes REST! 
Architecture services web de type ressource – Antoine Pouch 7
Les Interactions 
Architecture services web de type ressource – Antoine Pouch 8
Interaction: Request/Response 
• La plus simple 
• Couplage temporel fort 
• Mauvaise scalability 
Architecture services web de type ressource – Antoine Pouch 9
Interaction: Request/Acknowledge 
• Plus complexe 
• Annule le couplage temporel 
• Sous-type : Callback 
• Complexe 
• Sous-type : Poll 
• Ne résout pas le problème de scalability, peut uniquement le déporter 
Architecture services web de type ressource – Antoine Pouch 10
Interaction: Media Type Negotiation 
• Extension 
• Pas sémantiquement correct 
• Header 
• Parfait, fournit par spécification HTTP (Accept) 
• Généralement pas de négociation, client 
• Pattern: Response Handler 
• Discovery: HEAD 
Architecture services web de type ressource – Antoine Pouch 11
Interaction : Service Liés (hypermedia 
control/HATEOAS) 
• Découverte : OPTIONS 
• Suites logiques retournées dans la réponse 
• Permet aux clients d'avoir peu d'URI statiques à connaître 
• Permet le changement, l'ajout de services, l'auto-documentation 
• Mais attention aux clients qui « bookmarkent » ! 
• Parfois retournés dans le Link header : pas sémantiquement correct ! 
Et trop unidimensionnel. 
Architecture services web de type ressource – Antoine Pouch 12
Intéraction : HAL 
• Hypertext Application Language 
• application/hal+json 
Architecture services web de type ressource – Antoine Pouch 13
Avant HAL 
{ 
"status": "This is my awesome status update!", 
"user": "mwop" 
} 
Architecture services web de type ressource – Antoine Pouch 14
Avec HAL 
{ 
"_links": { 
"self": {"href": "http://example.com/api/status/1347"} 
}, 
"id": "1347", 
"timestamp": "2013-02-11 23:33:47", 
"status": "This is my awesome status update!", 
"_embedded": { 
"user": { 
"_links": { 
"self": {"href": "http://example.com/api/user/mwop"} 
}, 
"id": "mwop", 
"name": "Matthew Weier O'Phinney", 
"url": "http://mwop.net" 
} 
} 
} 
Architecture services web de type ressource – Antoine Pouch 15
Implémentation 
Architecture services web de type ressource – Antoine Pouch 16
Data Transfer Objects 
• Pour éviter l'annotation des Domain Objects (Couplage Structurel Très 
Fort, références circulaires) 
• POPOs : manipulent types génériques ou autres DTOs 
• Créés en entrée par un Request Mapper ou un déserialiseur 
• Utilisés en sortie par un Response Mapper ou un sérialiseur 
• Le Mapping peut être centralisés et formalisé en fichiers de 
configuration 
• Introduisent de la lourdeur 
Architecture services web de type ressource – Antoine Pouch 17
Request Mapper 
• Si besoin de plus qu'un simple Deserializer 
• Injecté au Service Controller, ou avec une Factory 
• Varient selon le client, le format d'entrée, la version 
• Créént les DTOs 
Architecture services web de type ressource – Antoine Pouch 18
Response Mapper 
• Si besoin de plus qu'un simple Serializer 
• Injecté au Service Controller, ou avec une Factory 
• Varient selon le client, le format de sortie, la version 
• Manipulent les DTOs 
• Utiles par ex. pour une réponse JSON qui sera différente d'un XLS 
(données moins agrégées) 
• Introduisent de la lourdeur 
Architecture services web de type ressource – Antoine Pouch 19
Interceptors 
• Utilisés en entrée et sortie 
• Entrée : Authentification, Autorisation, Caching, 
• Sortie : Logging, Error handling 
Architecture services web de type ressource – Antoine Pouch 20
Styles d'implémentation 
• Transaction Script 
• Fat fat controller, prévoir du copy-paste 
• Datasource Adapter 
• Souvent dérivé d'annotation sur Objets issus d'ORM 
• Operation Script 
• Classes centrales qui fournissent des opérations possibles sur le domaine 
• Command Invoker 
• Plus rien dans le service. Sauvegardable. Nécessaire pour Request/Ack. 
• Workflow Connector 
• Comme CI, mais contenu dans un Workflow Engine. Pour suites d'opérations. 
Architecture services web de type ressource – Antoine Pouch 21
Déroulement 
Architecture services web de type ressource – Antoine Pouch 22
Préparation 
Architecture services web de type ressource – Antoine Pouch 23
Exécution 
Architecture services web de type ressource – Antoine Pouch 24
Finalisation 
Architecture services web de type ressource – Antoine Pouch 25
Integration dans les Frameworks 
MVC (symfony2, ZF2) 
Architecture services web de type ressource – Antoine Pouch 26
Generalités 
• Décharge de responsabilité : Les méthodes/outils qui suivent sont selon la 
communauté du framework la façon la meilleure/plus simple 
d'implémenter REST mais vous pouvez toujours les modifier ou les oublier 
• Le Routing est extrêmement simplifié 
• Les intercepteurs sont intégrés : Events. 
• Events génériques inclus : Authentication, Authorization, Logging 
• Serializer et Deserializer disponibles 
• Create/Update utilisent les Forms sf2 ou ZF2. Les aimez-vous? 
• Par défaut, multiples actions dans un seul controlleur. Aimez-vous les 
classes de 3000 lignes ? 
Architecture services web de type ressource – Antoine Pouch 27
symfony2 
• FOSRestBundle 
• https://github.com/FriendsOfSymfony/FOSRestBundle 
• NelmioApiDocBundle 
• https://github.com/nelmio/NelmioApiDocBundle 
• JMSSerializerBundle 
• https://github.com/schmittjoh/JMSSerializerBundle 
• L’enfer des configurations et des annotations 
Architecture services web de type ressource – Antoine Pouch 28
Symfony - Routing 
users: 
type: rest 
resource: AcmeHelloBundleControllerUsersController 
class UsersController { 
public function optionsUsersAction() {} // "options_users" [OPTIONS] /users 
public function getUsersAction() {} // "get_users" [GET] /users 
public function getUserAction($slug) {} // "get_user" [GET] /users/{slug} 
public function editUserCommentAction($slug, $id) {} // "edit_user_comment" [GET] 
/users/{slug}/comments/{id}/edit 
} 
Architecture services web de type ressource – Antoine Pouch 29
Symfony – Routing not simplified 
/** 
* List all notes. 
* 
* @ApiDoc( 
* resource = true, 
* statusCodes = { 
* 200 = "Returned when successful" 
* } 
* ) 
* 
* @AnnotationsQueryParam(name="offset", requirements="d+", nullable=true, description="Offset from which to start listing notes.") 
* @AnnotationsQueryParam(name="limit", requirements="d+", default="5", description="How many notes to return.") 
* 
* @AnnotationsView() 
* 
* @param Request $request the request object 
* @param ParamFetcherInterface $paramFetcher param fetcher service 
* 
* @return array 
*/ 
public function getNotesAction(Request $request, ParamFetcherInterface $paramFetcher) 
Architecture services web de type ressource – Antoine Pouch 30
Symfony – Préparation - Events partout 
• Interceptors (Auth, Logging, etc.) 
• FormatListener pour la négociation de format 
• JMSSerializer très puissant (supporte les versions par ex.), peut être 
étendu en Request Mapper. Ne pas utiliser les annotations Doctrine ! 
• BodyConverters qui servent de Request Mappers sinon (permet 
injection de params dans controlleurs). Mais si on les utilise, il faut 
faire le routing à la main. Et la validation par regexp ou classes 
spécifiées dans les annotations, vraiment ? 
Architecture services web de type ressource – Antoine Pouch 31
Symfony – Exécution 
• Create et Update via des Forms 
• Peuvent être affichés en HTML (Backoffice rapide) 
• Mais il faut les aimer 
Architecture services web de type ressource – Antoine Pouch 32
Symfony - rendering 
• Gestion des exceptions dans controlleur à part, avec configuration des 
exceptions vers statuts et messages. Lourd. 
• ViewHandler (= Response Handler) : Couche de plus entre le 
controlleur et la vue. Rend la vue agnostique au format (xml, json, 
twig). Peut être étendu en ResponseMapper. Utilise JSMSerializer. 
• Ne supporte pas les DTOs, mais extensible. Mais soyez prêts à 
beaucoup de changements si vous sortez des sentiers battus. 
Architecture services web de type ressource – Antoine Pouch 33
ZF2 
• Support intégré! Mais faible. Ou qui laisse beaucoup de liberté. 
• Apigility pour aller plus loin. 
Architecture services web de type ressource – Antoine Pouch 34
ZF2 - Préparation 
• Interceptors pour auth, logging, etc. 
• Un controlleur par entité obligatoirement (encore ces controlleurs de 
3000 lignes) 
• AbstractRestfulController fournit un mapping très basique (mais 
efficace) de verbes HTTP vers méthodes. 
• Pas de Request Mappers, en fait, même pas de déserializer. Ne 
parlons pas des DTOs. 
Architecture services web de type ressource – Antoine Pouch 35
ZF2 – Exécution 
• Create et Update via des Forms 
• Peuvent être affichés en HTML (Backoffice rapide) 
• Mais il faut les aimer 
• Moins forcé de les utiliser que dans sf2 
Architecture services web de type ressource – Antoine Pouch 36
ZF2 - rendering 
• JsonModel. Peut être étendu en ResponseMapper, gère les DTOs avec 
propriétés publiques. 
• Et c’est tout. 
Architecture services web de type ressource – Antoine Pouch 37
ZF2 - Apigility 
• https://apigility.org 
• Création d’API par formulaire ! REST ou SOAP. 
• Génération de backoffice 
• Auto-documentation 
• Génération de sous-classes de contrôleurs vides à remplir pour 
particulariser. 
Architecture services web de type ressource – Antoine Pouch 38
Symfony et ZF2 – Manques 
• DTOs 
• Command Invokers. Aucune possibilité de faire du Request/Ack. 
Même pas de Ack automatique. 
• Trop d'accent mis sur couplage avec ORM 
Architecture services web de type ressource – Antoine Pouch 39
Références 
• Service Design Patterns par Robert Daigneau, 2012, Addison Wesley 
• Richardson Maturity Level : 
martinfowler.com/articles/richardsonMaturityModel.html 
• Hypertext Application Language : stateless.co/hal_specification.html 
• Integrating into ZF : www.slideshare.net/mikestowe/building-a-rest-api- 
with-zend-framework-2 
• Integrating into symphony : welcometothebundle.com/symfony2- 
rest-api-the-best-2013-way/ 
Architecture services web de type ressource – Antoine Pouch 40

Contenu connexe

Tendances

Laravel yet another framework
Laravel  yet another frameworkLaravel  yet another framework
Laravel yet another frameworkLAHAXE Arnaud
 
Cours 2/3 - Architecture Web
Cours 2/3 - Architecture WebCours 2/3 - Architecture Web
Cours 2/3 - Architecture WebAdyax
 
Programmation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorProgrammation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorFlorian Beaufumé
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à dockerBoubker ABERWAG
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web ServicesLilia Sfaxi
 

Tendances (6)

Laravel yet another framework
Laravel  yet another frameworkLaravel  yet another framework
Laravel yet another framework
 
Web services SOAP et REST
Web services  SOAP et RESTWeb services  SOAP et REST
Web services SOAP et REST
 
Cours 2/3 - Architecture Web
Cours 2/3 - Architecture WebCours 2/3 - Architecture Web
Cours 2/3 - Architecture Web
 
Programmation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorProgrammation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et Reactor
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à docker
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 

En vedette

Etat des lieux de la sécurisation des paiements par carte sur internet
Etat des lieux de la sécurisation des paiements par carte sur internetEtat des lieux de la sécurisation des paiements par carte sur internet
Etat des lieux de la sécurisation des paiements par carte sur internetBee_Ware
 
White paper - La sécurisation des web services
White paper - La sécurisation des web servicesWhite paper - La sécurisation des web services
White paper - La sécurisation des web servicesBee_Ware
 
La sécurité des Si en établissement de santé
La sécurité des Si en établissement de santéLa sécurité des Si en établissement de santé
La sécurité des Si en établissement de santéBee_Ware
 
ASFWS 2012 / Initiation à la sécurité des Web Services par Sylvain Maret
ASFWS 2012 / Initiation à la sécurité des Web Services par Sylvain MaretASFWS 2012 / Initiation à la sécurité des Web Services par Sylvain Maret
ASFWS 2012 / Initiation à la sécurité des Web Services par Sylvain MaretSylvain Maret
 
Guide de mise en oeuvre d'une authentification forte avec une cps
Guide de mise en oeuvre d'une authentification forte avec une cpsGuide de mise en oeuvre d'une authentification forte avec une cps
Guide de mise en oeuvre d'une authentification forte avec une cpsBee_Ware
 
SophiaConf 2010 Présentation de la conférence du 30 Juin - Gestion des identi...
SophiaConf 2010 Présentation de la conférence du 30 Juin - Gestion des identi...SophiaConf 2010 Présentation de la conférence du 30 Juin - Gestion des identi...
SophiaConf 2010 Présentation de la conférence du 30 Juin - Gestion des identi...TelecomValley
 
Où intégrer les services web (association/event)
Où intégrer les services web (association/event)Où intégrer les services web (association/event)
Où intégrer les services web (association/event)Rémi Thomas
 
Les principales failles de sécurité des applications web actuelles
Les principales failles de sécurité des applications web actuellesLes principales failles de sécurité des applications web actuelles
Les principales failles de sécurité des applications web actuellesBee_Ware
 
Menaces informatique et pratique de sécurité en france
Menaces informatique et pratique de sécurité en franceMenaces informatique et pratique de sécurité en france
Menaces informatique et pratique de sécurité en franceBee_Ware
 
Services web RESTful
Services web RESTfulServices web RESTful
Services web RESTfulgoldoraf
 
L'essentiel a savoi sur les démarreurs échange standard
L'essentiel a savoi sur les démarreurs échange standardL'essentiel a savoi sur les démarreurs échange standard
L'essentiel a savoi sur les démarreurs échange standardWebdealauto
 
#WeAreTravel15 - Conférence SEO
#WeAreTravel15 - Conférence SEO #WeAreTravel15 - Conférence SEO
#WeAreTravel15 - Conférence SEO My Bloggers Company
 
2015 02-18 cp mst
2015 02-18 cp mst2015 02-18 cp mst
2015 02-18 cp mstujcdbn
 
Plaquette Ailleurs Communication
Plaquette Ailleurs CommunicationPlaquette Ailleurs Communication
Plaquette Ailleurs CommunicationDidier Brisset
 

En vedette (20)

Etat des lieux de la sécurisation des paiements par carte sur internet
Etat des lieux de la sécurisation des paiements par carte sur internetEtat des lieux de la sécurisation des paiements par carte sur internet
Etat des lieux de la sécurisation des paiements par carte sur internet
 
White paper - La sécurisation des web services
White paper - La sécurisation des web servicesWhite paper - La sécurisation des web services
White paper - La sécurisation des web services
 
La sécurité des Si en établissement de santé
La sécurité des Si en établissement de santéLa sécurité des Si en établissement de santé
La sécurité des Si en établissement de santé
 
ASFWS 2012 / Initiation à la sécurité des Web Services par Sylvain Maret
ASFWS 2012 / Initiation à la sécurité des Web Services par Sylvain MaretASFWS 2012 / Initiation à la sécurité des Web Services par Sylvain Maret
ASFWS 2012 / Initiation à la sécurité des Web Services par Sylvain Maret
 
Guide de mise en oeuvre d'une authentification forte avec une cps
Guide de mise en oeuvre d'une authentification forte avec une cpsGuide de mise en oeuvre d'une authentification forte avec une cps
Guide de mise en oeuvre d'une authentification forte avec une cps
 
SophiaConf 2010 Présentation de la conférence du 30 Juin - Gestion des identi...
SophiaConf 2010 Présentation de la conférence du 30 Juin - Gestion des identi...SophiaConf 2010 Présentation de la conférence du 30 Juin - Gestion des identi...
SophiaConf 2010 Présentation de la conférence du 30 Juin - Gestion des identi...
 
Où intégrer les services web (association/event)
Où intégrer les services web (association/event)Où intégrer les services web (association/event)
Où intégrer les services web (association/event)
 
Les principales failles de sécurité des applications web actuelles
Les principales failles de sécurité des applications web actuellesLes principales failles de sécurité des applications web actuelles
Les principales failles de sécurité des applications web actuelles
 
Présentation SOA
Présentation SOAPrésentation SOA
Présentation SOA
 
Menaces informatique et pratique de sécurité en france
Menaces informatique et pratique de sécurité en franceMenaces informatique et pratique de sécurité en france
Menaces informatique et pratique de sécurité en france
 
Services web RESTful
Services web RESTfulServices web RESTful
Services web RESTful
 
Nagios 3
Nagios 3Nagios 3
Nagios 3
 
L'essentiel a savoi sur les démarreurs échange standard
L'essentiel a savoi sur les démarreurs échange standardL'essentiel a savoi sur les démarreurs échange standard
L'essentiel a savoi sur les démarreurs échange standard
 
Migration 060815-3 haiti politique migratoire-03 aout
Migration 060815-3 haiti politique migratoire-03 aoutMigration 060815-3 haiti politique migratoire-03 aout
Migration 060815-3 haiti politique migratoire-03 aout
 
OBJECTIF AERO
OBJECTIF AEROOBJECTIF AERO
OBJECTIF AERO
 
Tarotmag n°11
Tarotmag n°11Tarotmag n°11
Tarotmag n°11
 
#WeAreTravel15 - Conférence SEO
#WeAreTravel15 - Conférence SEO #WeAreTravel15 - Conférence SEO
#WeAreTravel15 - Conférence SEO
 
2015 02-18 cp mst
2015 02-18 cp mst2015 02-18 cp mst
2015 02-18 cp mst
 
Plaquette Ailleurs Communication
Plaquette Ailleurs CommunicationPlaquette Ailleurs Communication
Plaquette Ailleurs Communication
 
Le tarot n°6
Le tarot n°6Le tarot n°6
Le tarot n°6
 

Similaire à Architecture de services web de type ressource

Introduction à Cloud Foundry et au PaaS
Introduction à Cloud Foundry et au PaaSIntroduction à Cloud Foundry et au PaaS
Introduction à Cloud Foundry et au PaaSGerard Konan
 
BreizhCamp 2022
BreizhCamp 2022BreizhCamp 2022
BreizhCamp 2022SpikeeLabs
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)Restlet
 
BreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureBreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureNicolas Georgeault
 
S51 vos projets web services ibm i a l aide de php
S51   vos projets web services ibm i a l aide de phpS51   vos projets web services ibm i a l aide de php
S51 vos projets web services ibm i a l aide de phpGautier DUMAS
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...MSDEVMTL
 
SOA-Partie 2.pdf hvjhvhjvkhvhjvhvhvjhvkhv
SOA-Partie 2.pdf hvjhvhjvkhvhjvhvhvjhvkhvSOA-Partie 2.pdf hvjhvhjvkhvhjvhvhvjhvkhv
SOA-Partie 2.pdf hvjhvhjvkhvhjvhvhvjhvkhvamine17157
 
Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent biret azure functions et flow #AosCanadianTour (quebec)Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent biret azure functions et flow #AosCanadianTour (quebec)Vincent Biret
 
Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent Biret
 
Workflow et bcs sous share point 2013
Workflow et bcs sous share point 2013Workflow et bcs sous share point 2013
Workflow et bcs sous share point 2013Nabil Babaci
 
Workflow et bcs sous SharePoint 2013
Workflow et bcs sous SharePoint 2013Workflow et bcs sous SharePoint 2013
Workflow et bcs sous SharePoint 2013Nabil Babaci
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSRenaud Dumont
 
DevoxxFR Présentation des portails en 2014
DevoxxFR Présentation des portails en 2014DevoxxFR Présentation des portails en 2014
DevoxxFR Présentation des portails en 2014Stéphane Liétard
 
Gab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir Arezki
Gab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir ArezkiGab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir Arezki
Gab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir ArezkiSamir Arezki ☁
 
Gab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir Arezki
Gab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir ArezkiGab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir Arezki
Gab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir ArezkiAZUG FR
 
Cours services web_fabrice_mourlin
Cours services web_fabrice_mourlinCours services web_fabrice_mourlin
Cours services web_fabrice_mourlinangeeLee
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrOxalide
 
Presentation websockets
Presentation websocketsPresentation websockets
Presentation websocketsBert Poller
 

Similaire à Architecture de services web de type ressource (20)

Introduction à Cloud Foundry et au PaaS
Introduction à Cloud Foundry et au PaaSIntroduction à Cloud Foundry et au PaaS
Introduction à Cloud Foundry et au PaaS
 
BreizhCamp 2022
BreizhCamp 2022BreizhCamp 2022
BreizhCamp 2022
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)
 
BreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureBreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec Azure
 
S51 vos projets web services ibm i a l aide de php
S51   vos projets web services ibm i a l aide de phpS51   vos projets web services ibm i a l aide de php
S51 vos projets web services ibm i a l aide de php
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
 
SOA-Partie 2.pdf hvjhvhjvkhvhjvhvhvjhvkhv
SOA-Partie 2.pdf hvjhvhjvkhvhjvhvhvjhvkhvSOA-Partie 2.pdf hvjhvhjvkhvhjvhvhvjhvkhv
SOA-Partie 2.pdf hvjhvhjvkhvhjvhvhvjhvkhv
 
Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent biret azure functions et flow #AosCanadianTour (quebec)Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent biret azure functions et flow #AosCanadianTour (quebec)
 
Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)
 
Workflow et bcs sous share point 2013
Workflow et bcs sous share point 2013Workflow et bcs sous share point 2013
Workflow et bcs sous share point 2013
 
Workflow et bcs sous SharePoint 2013
Workflow et bcs sous SharePoint 2013Workflow et bcs sous SharePoint 2013
Workflow et bcs sous SharePoint 2013
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJS
 
DevoxxFR Présentation des portails en 2014
DevoxxFR Présentation des portails en 2014DevoxxFR Présentation des portails en 2014
DevoxxFR Présentation des portails en 2014
 
Gab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir Arezki
Gab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir ArezkiGab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir Arezki
Gab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir Arezki
 
Gab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir Arezki
Gab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir ArezkiGab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir Arezki
Gab 2017 Lyon - les strategies d'intégration avec Azure iPaaS - Samir Arezki
 
Hello xcode 4 v2
Hello xcode 4 v2Hello xcode 4 v2
Hello xcode 4 v2
 
Hello Xcode 4 v2
Hello Xcode 4 v2Hello Xcode 4 v2
Hello Xcode 4 v2
 
Cours services web_fabrice_mourlin
Cours services web_fabrice_mourlinCours services web_fabrice_mourlin
Cours services web_fabrice_mourlin
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.Fr
 
Presentation websockets
Presentation websocketsPresentation websockets
Presentation websockets
 

Architecture de services web de type ressource

  • 1. Architecture de services web de type ressource Antoine Pouch Architecte et chef d‘équipe - DataCandy design@pouch.name https://joind.in/12825
  • 2. Généralités Architecture services web de type ressource – Antoine Pouch 2
  • 3. Un service web, qu’est-ce? • Partage des fonctions entre applications • Permettre à des logiciels fonctionnant sur des environnements disparates de communiquer • Dé-couplage ? • Fonctionnel • Structurel (de données) • Temporel • Positionnel (URI) Architecture services web de type ressource – Antoine Pouch 3
  • 4. Les différents types Les classiques • CORBA • DCOM Les modernes • RPC • Message • Ressource Architecture services web de type ressource – Antoine Pouch 4
  • 5. Les différents types d'API - RPC • Une URL • Une signature par méthode • SOAP/XML/WSDL usuellement Architecture services web de type ressource – Antoine Pouch 5
  • 6. Les différents types d'API- Message • Une URL • Une signature pour toutes une famille de méthodes avec un paramètre unique qui diffère • SOAP/XML/WSDL usuellement Architecture services web de type ressource – Antoine Pouch 6
  • 7. Les différents types d'API- Ressource • Une URL par ressource, par action • Signatures proches, faciles à « deviner » • Pas toutes REST! Architecture services web de type ressource – Antoine Pouch 7
  • 8. Les Interactions Architecture services web de type ressource – Antoine Pouch 8
  • 9. Interaction: Request/Response • La plus simple • Couplage temporel fort • Mauvaise scalability Architecture services web de type ressource – Antoine Pouch 9
  • 10. Interaction: Request/Acknowledge • Plus complexe • Annule le couplage temporel • Sous-type : Callback • Complexe • Sous-type : Poll • Ne résout pas le problème de scalability, peut uniquement le déporter Architecture services web de type ressource – Antoine Pouch 10
  • 11. Interaction: Media Type Negotiation • Extension • Pas sémantiquement correct • Header • Parfait, fournit par spécification HTTP (Accept) • Généralement pas de négociation, client • Pattern: Response Handler • Discovery: HEAD Architecture services web de type ressource – Antoine Pouch 11
  • 12. Interaction : Service Liés (hypermedia control/HATEOAS) • Découverte : OPTIONS • Suites logiques retournées dans la réponse • Permet aux clients d'avoir peu d'URI statiques à connaître • Permet le changement, l'ajout de services, l'auto-documentation • Mais attention aux clients qui « bookmarkent » ! • Parfois retournés dans le Link header : pas sémantiquement correct ! Et trop unidimensionnel. Architecture services web de type ressource – Antoine Pouch 12
  • 13. Intéraction : HAL • Hypertext Application Language • application/hal+json Architecture services web de type ressource – Antoine Pouch 13
  • 14. Avant HAL { "status": "This is my awesome status update!", "user": "mwop" } Architecture services web de type ressource – Antoine Pouch 14
  • 15. Avec HAL { "_links": { "self": {"href": "http://example.com/api/status/1347"} }, "id": "1347", "timestamp": "2013-02-11 23:33:47", "status": "This is my awesome status update!", "_embedded": { "user": { "_links": { "self": {"href": "http://example.com/api/user/mwop"} }, "id": "mwop", "name": "Matthew Weier O'Phinney", "url": "http://mwop.net" } } } Architecture services web de type ressource – Antoine Pouch 15
  • 16. Implémentation Architecture services web de type ressource – Antoine Pouch 16
  • 17. Data Transfer Objects • Pour éviter l'annotation des Domain Objects (Couplage Structurel Très Fort, références circulaires) • POPOs : manipulent types génériques ou autres DTOs • Créés en entrée par un Request Mapper ou un déserialiseur • Utilisés en sortie par un Response Mapper ou un sérialiseur • Le Mapping peut être centralisés et formalisé en fichiers de configuration • Introduisent de la lourdeur Architecture services web de type ressource – Antoine Pouch 17
  • 18. Request Mapper • Si besoin de plus qu'un simple Deserializer • Injecté au Service Controller, ou avec une Factory • Varient selon le client, le format d'entrée, la version • Créént les DTOs Architecture services web de type ressource – Antoine Pouch 18
  • 19. Response Mapper • Si besoin de plus qu'un simple Serializer • Injecté au Service Controller, ou avec une Factory • Varient selon le client, le format de sortie, la version • Manipulent les DTOs • Utiles par ex. pour une réponse JSON qui sera différente d'un XLS (données moins agrégées) • Introduisent de la lourdeur Architecture services web de type ressource – Antoine Pouch 19
  • 20. Interceptors • Utilisés en entrée et sortie • Entrée : Authentification, Autorisation, Caching, • Sortie : Logging, Error handling Architecture services web de type ressource – Antoine Pouch 20
  • 21. Styles d'implémentation • Transaction Script • Fat fat controller, prévoir du copy-paste • Datasource Adapter • Souvent dérivé d'annotation sur Objets issus d'ORM • Operation Script • Classes centrales qui fournissent des opérations possibles sur le domaine • Command Invoker • Plus rien dans le service. Sauvegardable. Nécessaire pour Request/Ack. • Workflow Connector • Comme CI, mais contenu dans un Workflow Engine. Pour suites d'opérations. Architecture services web de type ressource – Antoine Pouch 21
  • 22. Déroulement Architecture services web de type ressource – Antoine Pouch 22
  • 23. Préparation Architecture services web de type ressource – Antoine Pouch 23
  • 24. Exécution Architecture services web de type ressource – Antoine Pouch 24
  • 25. Finalisation Architecture services web de type ressource – Antoine Pouch 25
  • 26. Integration dans les Frameworks MVC (symfony2, ZF2) Architecture services web de type ressource – Antoine Pouch 26
  • 27. Generalités • Décharge de responsabilité : Les méthodes/outils qui suivent sont selon la communauté du framework la façon la meilleure/plus simple d'implémenter REST mais vous pouvez toujours les modifier ou les oublier • Le Routing est extrêmement simplifié • Les intercepteurs sont intégrés : Events. • Events génériques inclus : Authentication, Authorization, Logging • Serializer et Deserializer disponibles • Create/Update utilisent les Forms sf2 ou ZF2. Les aimez-vous? • Par défaut, multiples actions dans un seul controlleur. Aimez-vous les classes de 3000 lignes ? Architecture services web de type ressource – Antoine Pouch 27
  • 28. symfony2 • FOSRestBundle • https://github.com/FriendsOfSymfony/FOSRestBundle • NelmioApiDocBundle • https://github.com/nelmio/NelmioApiDocBundle • JMSSerializerBundle • https://github.com/schmittjoh/JMSSerializerBundle • L’enfer des configurations et des annotations Architecture services web de type ressource – Antoine Pouch 28
  • 29. Symfony - Routing users: type: rest resource: AcmeHelloBundleControllerUsersController class UsersController { public function optionsUsersAction() {} // "options_users" [OPTIONS] /users public function getUsersAction() {} // "get_users" [GET] /users public function getUserAction($slug) {} // "get_user" [GET] /users/{slug} public function editUserCommentAction($slug, $id) {} // "edit_user_comment" [GET] /users/{slug}/comments/{id}/edit } Architecture services web de type ressource – Antoine Pouch 29
  • 30. Symfony – Routing not simplified /** * List all notes. * * @ApiDoc( * resource = true, * statusCodes = { * 200 = "Returned when successful" * } * ) * * @AnnotationsQueryParam(name="offset", requirements="d+", nullable=true, description="Offset from which to start listing notes.") * @AnnotationsQueryParam(name="limit", requirements="d+", default="5", description="How many notes to return.") * * @AnnotationsView() * * @param Request $request the request object * @param ParamFetcherInterface $paramFetcher param fetcher service * * @return array */ public function getNotesAction(Request $request, ParamFetcherInterface $paramFetcher) Architecture services web de type ressource – Antoine Pouch 30
  • 31. Symfony – Préparation - Events partout • Interceptors (Auth, Logging, etc.) • FormatListener pour la négociation de format • JMSSerializer très puissant (supporte les versions par ex.), peut être étendu en Request Mapper. Ne pas utiliser les annotations Doctrine ! • BodyConverters qui servent de Request Mappers sinon (permet injection de params dans controlleurs). Mais si on les utilise, il faut faire le routing à la main. Et la validation par regexp ou classes spécifiées dans les annotations, vraiment ? Architecture services web de type ressource – Antoine Pouch 31
  • 32. Symfony – Exécution • Create et Update via des Forms • Peuvent être affichés en HTML (Backoffice rapide) • Mais il faut les aimer Architecture services web de type ressource – Antoine Pouch 32
  • 33. Symfony - rendering • Gestion des exceptions dans controlleur à part, avec configuration des exceptions vers statuts et messages. Lourd. • ViewHandler (= Response Handler) : Couche de plus entre le controlleur et la vue. Rend la vue agnostique au format (xml, json, twig). Peut être étendu en ResponseMapper. Utilise JSMSerializer. • Ne supporte pas les DTOs, mais extensible. Mais soyez prêts à beaucoup de changements si vous sortez des sentiers battus. Architecture services web de type ressource – Antoine Pouch 33
  • 34. ZF2 • Support intégré! Mais faible. Ou qui laisse beaucoup de liberté. • Apigility pour aller plus loin. Architecture services web de type ressource – Antoine Pouch 34
  • 35. ZF2 - Préparation • Interceptors pour auth, logging, etc. • Un controlleur par entité obligatoirement (encore ces controlleurs de 3000 lignes) • AbstractRestfulController fournit un mapping très basique (mais efficace) de verbes HTTP vers méthodes. • Pas de Request Mappers, en fait, même pas de déserializer. Ne parlons pas des DTOs. Architecture services web de type ressource – Antoine Pouch 35
  • 36. ZF2 – Exécution • Create et Update via des Forms • Peuvent être affichés en HTML (Backoffice rapide) • Mais il faut les aimer • Moins forcé de les utiliser que dans sf2 Architecture services web de type ressource – Antoine Pouch 36
  • 37. ZF2 - rendering • JsonModel. Peut être étendu en ResponseMapper, gère les DTOs avec propriétés publiques. • Et c’est tout. Architecture services web de type ressource – Antoine Pouch 37
  • 38. ZF2 - Apigility • https://apigility.org • Création d’API par formulaire ! REST ou SOAP. • Génération de backoffice • Auto-documentation • Génération de sous-classes de contrôleurs vides à remplir pour particulariser. Architecture services web de type ressource – Antoine Pouch 38
  • 39. Symfony et ZF2 – Manques • DTOs • Command Invokers. Aucune possibilité de faire du Request/Ack. Même pas de Ack automatique. • Trop d'accent mis sur couplage avec ORM Architecture services web de type ressource – Antoine Pouch 39
  • 40. Références • Service Design Patterns par Robert Daigneau, 2012, Addison Wesley • Richardson Maturity Level : martinfowler.com/articles/richardsonMaturityModel.html • Hypertext Application Language : stateless.co/hal_specification.html • Integrating into ZF : www.slideshare.net/mikestowe/building-a-rest-api- with-zend-framework-2 • Integrating into symphony : welcometothebundle.com/symfony2- rest-api-the-best-2013-way/ Architecture services web de type ressource – Antoine Pouch 40