SlideShare une entreprise Scribd logo
1  sur  58
Télécharger pour lire hors ligne
Full-stack Microservices
William Bartlett
 w.bartlett@treeptik.fr  @bartlettstarman
 punkstarman  punkstarman
Treeptik
7 juin 2018
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 1 / 51
whoami ?
William Bartlett, Level 33
programmer
Agile Coach, Java dev,
Container enthusiast
Web Component nut
(Polymer)
Former doctoral
student
“Use the right tool
for the job”
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 2 / 51
Introduction
Section 1
Introduction
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 3 / 51
Introduction
Microservices
Avantages
séparation (« diviser pour régner »)
autonomie
automatisation
modularité
passage à l’échelle
transitions technologiques
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 4 / 51
Introduction
Microservices
Prix à payer
intégration complexe
cohérence ou disponibilité
frontières peu movibles
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 5 / 51
Introduction
Microservices
Les microservices, c’est amusant

William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 6 / 51
Introduction
Microservices
Côté serveur Côté client
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 7 / 51
Introduction
Microservices
Micro Frontends : https ://micro-frontends.org/
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 8 / 51
Introduction
Problématique
Problématique
Comment avoir une équipe pluridisciplinaire entièrement autonome ?
Etendre l’architecture en microservices au côté client
Conception atomique
Composants web distribués
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 9 / 51
Introduction
Plan
Etat de l’art
Composants web
Conception atomique
Microservices à pile complète
Cas d’étude
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 10 / 51
Etat de l’art
Section 2
Etat de l’art
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 11 / 51
Etat de l’art
Micro Frontends
Micro Frontends : https ://micro-frontends.org/
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 12 / 51
Etat de l’art
Projet Mosaic, Zalando
Skipper (router), InnKeeper (router config API)
Tailor (layout), Quilt (layout storage)
Shaker (components)
Tessellate (SSR)
https ://www.mosaic9.org/
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 13 / 51
Etat de l’art
OpenComponents, OpenTable
API de composants d’IHM
SSR ou non
https ://opencomponents.github.io/
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 14 / 51
Etat de l’art
Metaframework, CanopyTax
Single SPA
Tissage à l’exécution de micro-frontends.
https ://github.com/CanopyTax/single-spa
Exemple : https ://single-spa.surge.sh/
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 15 / 51
Etat de l’art
Autres solutions
Fragments JSP/ASP.Net
JSP Tag Library
Struts Tiles
Portlet (Liferay)
<iframe >
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 16 / 51
Composants web
Section 3
Composants web
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 17 / 51
Composants web
Composants web
Composants web
Composants modulaires et réutilisables pour le web.
4 spécifications W3C
initié en 2011
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 18 / 51
Composants web
Eléments personalisés
<script >
class MyElement extends HTMLElement {}
window.customElements.define(’my-element’, MyElement) ;
</script >
<my-element ></my-element >
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 19 / 51
Composants web
Maquettes HTML
<template id=”my-element” >
<p >Hello from my-element !</p >
</template >
<script >
class MyElement extends HTMLElement {
attachedCallback() {
const currentDocument = document.currentScript.ownerDocument ;
const template = currentDocument.querySelector(’#my-element’) ;
this.appendChild(template.content.cloneNode(true)) ;
}
}
window.customElements.define(’my-element’, MyElement) ;
</script >
<my-element ></my-element >
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 20 / 51
Composants web
Intéraction avec le CSS
<template id=”my-element” >
<style >
.text { color : red }
</style >
<p class=”text” >Hello from my-element !</p >
</template >
<script > ... </script >
<style >
.text { color : blue }
</style >
<my-element ></my-element >
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 21 / 51
Composants web
Intéraction avec le CSS
<template id=”my-element” >
<style >
.text { color : red }
</style >
<p class=”text” >Hello from my-element !</p >
</template >
<script > ... </script >
<style >
p.text { color : blue }
</style >
<my-element ></my-element >
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 22 / 51
Composants web
Intéraction avec le CSS
<template id=”my-element” >
<style >
p.text { color : red }
</style >
<p class=”text” >Hello from my-element !</p >
</template >
<script > ... </script >
<style >
p.text { color : blue }
</style >
<my-element ></my-element >
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 23 / 51
Composants web
Intéraction avec le CSS
<template id=”my-element” >
<style >
p.text { color : red }
</style >
<p class=”text” >Hello from my-element !</p >
</template >
<script > ... </script >
<style >
.text { color : blue !important }
</style >
<my-element ></my-element >
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 24 / 51
Composants web
DOM de l’ombre
...
<script >
class MyElement extends HTMLElement {
attachedCallback() {
const currentDocument = document.currentScript.ownerDocument ;
const template = currentDocument.querySelector(’#my-element’) ;
const shadowRoot = this.attachShadow({ mode : ’open’}) ;
shadowRoot.appendChild(template.content.cloneNode(true)) ;
}
}
</script >
...
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 25 / 51
Composants web
DOM de l’ombre
<template id=”my-element” >
<style >
:host { color : red }
</style >
<p >Hello from my-element !</p >
</template >
<script > ... </script >
<style >
p { color : blue }
</style >
<my-element ></my-element >
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 26 / 51
Composants web
DOM de l’ombre
<template id=”my-element” >
<style >
:host { color : red }
</style >
<p >Hello from my-element !</p >
</template >
<script > ... </script >
<style >
my-element { color : blue }
</style >
<my-element ></my-element >
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 27 / 51
Composants web
Imports HTML
my-element.html
<template id=”my-element” >
...
</template >
<script >
class MyElement extends HTMLElement {
...
}
window.customElements.define(’my-element’, MyElement) ;
</script >
index.html
<link rel=”import” href=”my-element.html” >
<my-element ></my-element >
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 28 / 51
Composants web
Imports modules ES6
my-element.js
class MyElement extends HTMLElement {
static get template() {
return ‘<style> .text { color: red; } </style>
<p class=”text”>Hello from my-element!</p>‘ ;
}
connectedCallback() {
const shadowRoot = this.attachShadow({ mode : ’open’ }) ;
shadowRoot.innerHTML = MyElement.template ;
}
}
window.customElements.define(’my-element’, MyElement) ;
index.html
<script type=”module” src=”my-element.js” ></script >
<my-element ></my-element >
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 29 / 51
Composants web
Et c’est un élément HTML
attributs
propriétés
événements
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 30 / 51
Composants web
Frameworks
Frameworks :
Polymer, SkateJS, Slim.js, x-tag, Bosonic, Stencil, …
React, Angular, Vue, …
https ://custom-elements-everywhere.com/
Plus-value :
liaison de données bidirectionnelle
réduction du code standard
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 31 / 51
Composants web
Bibliothèques de composants
https ://www.webcomponents.org/
Polymer (iron, paper, app, gold)
Vaadin
Google (Maps, YouTube)
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 32 / 51
Composants web
Composants web dans la nature
Google (Polymer)
Chrome
YouTube, Drive, Contacts
App d’exemple : Shop
(https ://shop.polymer-project.org/)
Electronic Arts
GitHub
Simpla
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 33 / 51
Conception atomique
Section 4
Conception atomique
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 34 / 51
Conception atomique
Conception atomique
Atomic Design
Méthodologie de création et de maintenance d’un système de
conception graphique
Brad Frost, 2016
http ://atomicdesign.bradfrost.com/
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 35 / 51
Conception atomique
Conception atomique
atomes molécules organismes maquettes écrans
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 36 / 51
Conception atomique
Atome
éléments indivisibles
identité graphique
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 37 / 51
Conception atomique
Molécule
atomes liés
raison d’être
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 38 / 51
Conception atomique
Organisme
composé d’atomes, de
molécules ou
d’organismes
composant complexe
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 39 / 51
Conception atomique
Maquette
agencement
d’organismes
page générique
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 40 / 51
Conception atomique
Page
maquette + données
preuve du concept
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 41 / 51
Microservices à pile complète
Section 5
Microservices à pile complète
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 42 / 51
Microservices à pile complète
Microservices + Composants web
intégration par HTTP
chargement à la demande
résilience face aux pannes
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 43 / 51
Microservices à pile complète
Composants web + Conception atomique
La conception atomique est la méthodologie nécessaire pour
développer un système de composants efficace et évolutif
NPO : composants d’intégration (AJAX, état)
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 44 / 51
Microservices à pile complète
Microservices à pile complète
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 45 / 51
Microservices à pile complète
Microservices à pile complète
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 46 / 51
Microservices à pile complète
Microservices à pile complète
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 47 / 51
Microservices à pile complète
Microservices à pile complète
router : pages (maquettes)
microservices : molécules, organismes, maquettes
socle : atomes, molécules
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 47 / 51
Cas d’étude
Section 6
Cas d’étude
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 48 / 51
Conclusion
Section 7
Conclusion
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 49 / 51
Conclusion
Conclusion
+ équipes autonomes
+ exposer API et composants
+ rapidité de construction
+ choix du framework
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 50 / 51
Conclusion
Conclusion
+ équipes autonomes
+ exposer API et composants
+ rapidité de construction
+ choix du framework
− couplage fort entre API et IHM
− conception bibliothèque > conception application
− pas d’isolation des dépendances
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 50 / 51
Conclusion
Pour aller plus loin
Injection de dépendances et de configuration
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 51 / 51
Conclusion
Pour aller plus loin
Injection de dépendances et de configuration
Encapsulation de services tiers :
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 51 / 51
Conclusion
Pour aller plus loin
Injection de dépendances et de configuration
Encapsulation de services tiers :
Auth0, Keycloak, Okta, …
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 51 / 51
Conclusion
Pour aller plus loin
Injection de dépendances et de configuration
Encapsulation de services tiers :
Auth0, Keycloak, Okta, …
Paypal
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 51 / 51
Conclusion
Pour aller plus loin
Injection de dépendances et de configuration
Encapsulation de services tiers :
Auth0, Keycloak, Okta, …
Paypal
OAuth2 via composant web : confiance ?
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 51 / 51
Conclusion
Pour aller plus loin
Injection de dépendances et de configuration
Encapsulation de services tiers :
Auth0, Keycloak, Okta, …
Paypal
OAuth2 via composant web : confiance ?
Logs, surveillance, instrumentation …
William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 51 / 51

Contenu connexe

Similaire à Full-stack Microservices

Aspect avec AspectJ
Aspect avec AspectJAspect avec AspectJ
Aspect avec AspectJsimeon
 
Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2
Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2
Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2Microsoft Décideurs IT
 
Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2
Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2
Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2Microsoft Technet France
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Xavier NOPRE
 
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Tarik Zakaria Benmerar
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
La sémantique html5 et Wordpress
La sémantique html5 et WordpressLa sémantique html5 et Wordpress
La sémantique html5 et WordpressVectorskin
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!CARA_Lyon
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!CARA_Lyon
 
Les nouveautés d'HTML 5
Les nouveautés d'HTML 5Les nouveautés d'HTML 5
Les nouveautés d'HTML 5StrasWeb
 
Je s'appelle Glowroot - LyonJUG Oct 2018
Je s'appelle Glowroot - LyonJUG Oct 2018Je s'appelle Glowroot - LyonJUG Oct 2018
Je s'appelle Glowroot - LyonJUG Oct 2018Henri Gomez
 
Room ou Realm : Quelle base de données pour vos applications Android ?
Room ou Realm : Quelle base de données pour vos applications Android ?Room ou Realm : Quelle base de données pour vos applications Android ?
Room ou Realm : Quelle base de données pour vos applications Android ?Ludovic ROLAND
 
Ajax - GTI780 & MTI780 - ETS - A08
Ajax - GTI780 & MTI780 - ETS - A08Ajax - GTI780 & MTI780 - ETS - A08
Ajax - GTI780 & MTI780 - ETS - A08Claude Coulombe
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de donnéesFranck SIMON
 
1-Introduction JQuery.pptx
1-Introduction JQuery.pptx1-Introduction JQuery.pptx
1-Introduction JQuery.pptxlaabid1
 

Similaire à Full-stack Microservices (20)

Aspect avec AspectJ
Aspect avec AspectJAspect avec AspectJ
Aspect avec AspectJ
 
Wicket - JUG Lausanne
Wicket - JUG LausanneWicket - JUG Lausanne
Wicket - JUG Lausanne
 
Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2
Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2
Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2
 
Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2
Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2
Retour d’expérience sur la mise en place de la délégation de ConfigMgr 2012 R2
 
Gwt intro-101
Gwt intro-101Gwt intro-101
Gwt intro-101
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013
 
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
La sémantique html5 et Wordpress
La sémantique html5 et WordpressLa sémantique html5 et Wordpress
La sémantique html5 et Wordpress
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
Les nouveautés d'HTML 5
Les nouveautés d'HTML 5Les nouveautés d'HTML 5
Les nouveautés d'HTML 5
 
CV REBAI Hamida
CV REBAI HamidaCV REBAI Hamida
CV REBAI Hamida
 
Je s'appelle Glowroot - LyonJUG Oct 2018
Je s'appelle Glowroot - LyonJUG Oct 2018Je s'appelle Glowroot - LyonJUG Oct 2018
Je s'appelle Glowroot - LyonJUG Oct 2018
 
Room ou Realm : Quelle base de données pour vos applications Android ?
Room ou Realm : Quelle base de données pour vos applications Android ?Room ou Realm : Quelle base de données pour vos applications Android ?
Room ou Realm : Quelle base de données pour vos applications Android ?
 
Ajax - GTI780 & MTI780 - ETS - A08
Ajax - GTI780 & MTI780 - ETS - A08Ajax - GTI780 & MTI780 - ETS - A08
Ajax - GTI780 & MTI780 - ETS - A08
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de données
 
Xml
XmlXml
Xml
 
1-Introduction JQuery.pptx
1-Introduction JQuery.pptx1-Introduction JQuery.pptx
1-Introduction JQuery.pptx
 

Full-stack Microservices

  • 1. Full-stack Microservices William Bartlett  w.bartlett@treeptik.fr  @bartlettstarman  punkstarman  punkstarman Treeptik 7 juin 2018 William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 1 / 51
  • 2. whoami ? William Bartlett, Level 33 programmer Agile Coach, Java dev, Container enthusiast Web Component nut (Polymer) Former doctoral student “Use the right tool for the job” William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 2 / 51
  • 3. Introduction Section 1 Introduction William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 3 / 51
  • 4. Introduction Microservices Avantages séparation (« diviser pour régner ») autonomie automatisation modularité passage à l’échelle transitions technologiques William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 4 / 51
  • 5. Introduction Microservices Prix à payer intégration complexe cohérence ou disponibilité frontières peu movibles William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 5 / 51
  • 6. Introduction Microservices Les microservices, c’est amusant  William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 6 / 51
  • 7. Introduction Microservices Côté serveur Côté client William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 7 / 51
  • 8. Introduction Microservices Micro Frontends : https ://micro-frontends.org/ William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 8 / 51
  • 9. Introduction Problématique Problématique Comment avoir une équipe pluridisciplinaire entièrement autonome ? Etendre l’architecture en microservices au côté client Conception atomique Composants web distribués William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 9 / 51
  • 10. Introduction Plan Etat de l’art Composants web Conception atomique Microservices à pile complète Cas d’étude William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 10 / 51
  • 11. Etat de l’art Section 2 Etat de l’art William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 11 / 51
  • 12. Etat de l’art Micro Frontends Micro Frontends : https ://micro-frontends.org/ William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 12 / 51
  • 13. Etat de l’art Projet Mosaic, Zalando Skipper (router), InnKeeper (router config API) Tailor (layout), Quilt (layout storage) Shaker (components) Tessellate (SSR) https ://www.mosaic9.org/ William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 13 / 51
  • 14. Etat de l’art OpenComponents, OpenTable API de composants d’IHM SSR ou non https ://opencomponents.github.io/ William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 14 / 51
  • 15. Etat de l’art Metaframework, CanopyTax Single SPA Tissage à l’exécution de micro-frontends. https ://github.com/CanopyTax/single-spa Exemple : https ://single-spa.surge.sh/ William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 15 / 51
  • 16. Etat de l’art Autres solutions Fragments JSP/ASP.Net JSP Tag Library Struts Tiles Portlet (Liferay) <iframe > William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 16 / 51
  • 17. Composants web Section 3 Composants web William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 17 / 51
  • 18. Composants web Composants web Composants web Composants modulaires et réutilisables pour le web. 4 spécifications W3C initié en 2011 William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 18 / 51
  • 19. Composants web Eléments personalisés <script > class MyElement extends HTMLElement {} window.customElements.define(’my-element’, MyElement) ; </script > <my-element ></my-element > William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 19 / 51
  • 20. Composants web Maquettes HTML <template id=”my-element” > <p >Hello from my-element !</p > </template > <script > class MyElement extends HTMLElement { attachedCallback() { const currentDocument = document.currentScript.ownerDocument ; const template = currentDocument.querySelector(’#my-element’) ; this.appendChild(template.content.cloneNode(true)) ; } } window.customElements.define(’my-element’, MyElement) ; </script > <my-element ></my-element > William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 20 / 51
  • 21. Composants web Intéraction avec le CSS <template id=”my-element” > <style > .text { color : red } </style > <p class=”text” >Hello from my-element !</p > </template > <script > ... </script > <style > .text { color : blue } </style > <my-element ></my-element > William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 21 / 51
  • 22. Composants web Intéraction avec le CSS <template id=”my-element” > <style > .text { color : red } </style > <p class=”text” >Hello from my-element !</p > </template > <script > ... </script > <style > p.text { color : blue } </style > <my-element ></my-element > William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 22 / 51
  • 23. Composants web Intéraction avec le CSS <template id=”my-element” > <style > p.text { color : red } </style > <p class=”text” >Hello from my-element !</p > </template > <script > ... </script > <style > p.text { color : blue } </style > <my-element ></my-element > William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 23 / 51
  • 24. Composants web Intéraction avec le CSS <template id=”my-element” > <style > p.text { color : red } </style > <p class=”text” >Hello from my-element !</p > </template > <script > ... </script > <style > .text { color : blue !important } </style > <my-element ></my-element > William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 24 / 51
  • 25. Composants web DOM de l’ombre ... <script > class MyElement extends HTMLElement { attachedCallback() { const currentDocument = document.currentScript.ownerDocument ; const template = currentDocument.querySelector(’#my-element’) ; const shadowRoot = this.attachShadow({ mode : ’open’}) ; shadowRoot.appendChild(template.content.cloneNode(true)) ; } } </script > ... William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 25 / 51
  • 26. Composants web DOM de l’ombre <template id=”my-element” > <style > :host { color : red } </style > <p >Hello from my-element !</p > </template > <script > ... </script > <style > p { color : blue } </style > <my-element ></my-element > William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 26 / 51
  • 27. Composants web DOM de l’ombre <template id=”my-element” > <style > :host { color : red } </style > <p >Hello from my-element !</p > </template > <script > ... </script > <style > my-element { color : blue } </style > <my-element ></my-element > William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 27 / 51
  • 28. Composants web Imports HTML my-element.html <template id=”my-element” > ... </template > <script > class MyElement extends HTMLElement { ... } window.customElements.define(’my-element’, MyElement) ; </script > index.html <link rel=”import” href=”my-element.html” > <my-element ></my-element > William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 28 / 51
  • 29. Composants web Imports modules ES6 my-element.js class MyElement extends HTMLElement { static get template() { return ‘<style> .text { color: red; } </style> <p class=”text”>Hello from my-element!</p>‘ ; } connectedCallback() { const shadowRoot = this.attachShadow({ mode : ’open’ }) ; shadowRoot.innerHTML = MyElement.template ; } } window.customElements.define(’my-element’, MyElement) ; index.html <script type=”module” src=”my-element.js” ></script > <my-element ></my-element > William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 29 / 51
  • 30. Composants web Et c’est un élément HTML attributs propriétés événements William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 30 / 51
  • 31. Composants web Frameworks Frameworks : Polymer, SkateJS, Slim.js, x-tag, Bosonic, Stencil, … React, Angular, Vue, … https ://custom-elements-everywhere.com/ Plus-value : liaison de données bidirectionnelle réduction du code standard William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 31 / 51
  • 32. Composants web Bibliothèques de composants https ://www.webcomponents.org/ Polymer (iron, paper, app, gold) Vaadin Google (Maps, YouTube) William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 32 / 51
  • 33. Composants web Composants web dans la nature Google (Polymer) Chrome YouTube, Drive, Contacts App d’exemple : Shop (https ://shop.polymer-project.org/) Electronic Arts GitHub Simpla William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 33 / 51
  • 34. Conception atomique Section 4 Conception atomique William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 34 / 51
  • 35. Conception atomique Conception atomique Atomic Design Méthodologie de création et de maintenance d’un système de conception graphique Brad Frost, 2016 http ://atomicdesign.bradfrost.com/ William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 35 / 51
  • 36. Conception atomique Conception atomique atomes molécules organismes maquettes écrans William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 36 / 51
  • 37. Conception atomique Atome éléments indivisibles identité graphique William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 37 / 51
  • 38. Conception atomique Molécule atomes liés raison d’être William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 38 / 51
  • 39. Conception atomique Organisme composé d’atomes, de molécules ou d’organismes composant complexe William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 39 / 51
  • 40. Conception atomique Maquette agencement d’organismes page générique William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 40 / 51
  • 41. Conception atomique Page maquette + données preuve du concept William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 41 / 51
  • 42. Microservices à pile complète Section 5 Microservices à pile complète William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 42 / 51
  • 43. Microservices à pile complète Microservices + Composants web intégration par HTTP chargement à la demande résilience face aux pannes William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 43 / 51
  • 44. Microservices à pile complète Composants web + Conception atomique La conception atomique est la méthodologie nécessaire pour développer un système de composants efficace et évolutif NPO : composants d’intégration (AJAX, état) William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 44 / 51
  • 45. Microservices à pile complète Microservices à pile complète William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 45 / 51
  • 46. Microservices à pile complète Microservices à pile complète William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 46 / 51
  • 47. Microservices à pile complète Microservices à pile complète William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 47 / 51
  • 48. Microservices à pile complète Microservices à pile complète router : pages (maquettes) microservices : molécules, organismes, maquettes socle : atomes, molécules William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 47 / 51
  • 49. Cas d’étude Section 6 Cas d’étude William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 48 / 51
  • 50. Conclusion Section 7 Conclusion William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 49 / 51
  • 51. Conclusion Conclusion + équipes autonomes + exposer API et composants + rapidité de construction + choix du framework William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 50 / 51
  • 52. Conclusion Conclusion + équipes autonomes + exposer API et composants + rapidité de construction + choix du framework − couplage fort entre API et IHM − conception bibliothèque > conception application − pas d’isolation des dépendances William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 50 / 51
  • 53. Conclusion Pour aller plus loin Injection de dépendances et de configuration William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 51 / 51
  • 54. Conclusion Pour aller plus loin Injection de dépendances et de configuration Encapsulation de services tiers : William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 51 / 51
  • 55. Conclusion Pour aller plus loin Injection de dépendances et de configuration Encapsulation de services tiers : Auth0, Keycloak, Okta, … William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 51 / 51
  • 56. Conclusion Pour aller plus loin Injection de dépendances et de configuration Encapsulation de services tiers : Auth0, Keycloak, Okta, … Paypal William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 51 / 51
  • 57. Conclusion Pour aller plus loin Injection de dépendances et de configuration Encapsulation de services tiers : Auth0, Keycloak, Okta, … Paypal OAuth2 via composant web : confiance ? William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 51 / 51
  • 58. Conclusion Pour aller plus loin Injection de dépendances et de configuration Encapsulation de services tiers : Auth0, Keycloak, Okta, … Paypal OAuth2 via composant web : confiance ? Logs, surveillance, instrumentation … William Bartlett (Treeptik) Full-stack Microservices 7 juin 2018 51 / 51