Comment avoir des équipes pluridisciplinaires entièrement autonomes en étendant les acquis des microservices au front-end. Pour cela je propose d'utiliser les composants web et la conception atomique.
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
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
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
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
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
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
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