SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
Paris EmberJS Lab #6
Novembre 2019
2
Antonin Messinger
Projet :
ember-cli-deploy-index-json: Générer un json destiné à être consommé par le backend pour
construire l’index.html
@mr_meuble
@amessinger
3
Guillaume Gérard (aka GreatWizard)
Projets :
GreatWizard/ember-circleci : Générer votre configuration CircleCI pour app ou addons
GreatWizard/ember-service-worker-unregistration : Désenregistrer vos services workers
peopledoc/ember-feature-controls : Activer / désactiver vos feature flags avec une interface
d’administration et permettre de garder l’état dans le localStorage.
@ggerard88
@GreatWizard
Taking Over
Server-side Rendering
Websites
- Antonin Messinger
- Guillaume Gérard
5
PeopleDoc il y a 3 ans
● Application SaaS en Django (server-side rendering)
● Templating avec Bootstrap 2/3
● Zéro API
● jQuery pour les quelques interactions asynchrones
● Une équipe de trois devs JS
○ Objectif : Faire les projets avec un framework JS moderne (spoiler: EmberJS)
○ Le legacy est énorme
Cas #1 : SPA embarquée
7
Cas #1 : SPA embarquée
Prend en charge une partie du DOM.
Utile lorsque la page est préexistante et rendue par le serveur.
Sujets :
Routage2DOM1 Feature Flags3
API4 Assets5
8
Cas #1 : SPA embarquée - DOM
L’application prend en charge une partie du DOM.
“By default, your application will [...] attach [...] to the document's body element. [...] You can [...]
append the application template to a different element by specifying its rootElement property”
— Ember guides, Changing the Root Element
Nous avons donc choisi de faire correspondre rootElement à modulePrefix.
9
Cas #1 : SPA embarquée - Routage
Nous voulons une application stateful en tirant avantage du routeur. Problème, notre application
est rendue à une URL de base que nous (frontend) ne maîtrisons pas.
“[...] indicate to the router what the root URL for your Ember application is [...] by configuring the
rootURL property [...]”
— Ember guides, Specifying a Root URL
Notre application va donc recevoir du backend cette URL de base pour que son routeur
n’intervienne qu’à partir de celle-ci.
10
Cette problématique de routage ne se limite pas à l’URL :
Notre application se trouve dans une arborescence
qu’elle ne connaît pas à priori.
Etant servi à l’URL /admin/stats, l’application voudra
afficher sa position dans l’arborescence via des breadcrumbs.
“Home > Admin > route_actuelle_de_l_app”
Le backend va donc la lui indiquer via un paramètre de la forme [{ label: Home’, url: ‘/’ }, { label:
Admin, url: ‘/admin’ }] (que nous passons par la suite à poteto/ember-crumbly).
Cas #1 : SPA embarquée - Breadcrumbs
/
useradmin
stats
11
Cas #1 : SPA embarquée - Feature Flags
Nous “feature flaggons” toutes nos fonctionnalités (avec kategengler/ember-feature-flags).
Le backend est responsable de leur activation, c’est pourquoi il passe une liste de la forme
{ flagName1: true, flagName2: false } à notre application.
Side note : nous avons un addon pour activer nos feature flags directement depuis l’app
peopledoc/ember-feature-controls
12
Cas #1 : SPA embarquée - API
Pour communiquer avec notre API, notre application a besoin de certaines d’informations :
- hostname (standard)
- namespace (standard)
- token (notre utilisateur a déjà une session, demandons au backend un token à l’initialisation !)
Si la destination des 2 premiers paramètres suit la logique du framework, token est pour sa part
non standard et nous le passons à un authenticator de simplabs/ember-simple-auth.
13
Cas #1 : SPA embarquée - Réutilisation des Assets
Notre application peut partager certaines assets avec le backend,
pour gagner un peu de cache entre autres.
Solution : un paramètre passé du backend au frontend.
Ex. iconsPath: “backend.com/assets/icons.svg”
Attention, le fait d’avoir un markup HTML venant de deux applicatifs distincts peut poser des
problèmes de compatibilité si l’un et l’autre visent des versions différentes du framework UI.
Contenu géré par l’app Ember
Navigation rendu par le
serveur
SPA build assetsserver assets
Dans la page web :
“backend.com/s/icons.svg”
Dans un template :
“frontend.com/b/icons.svg”
“backend.com/s/icons.svg”
<html>
14
L’addon xcambar/ember-cli-embedded permet de :
- contrôler quand démarre l’application Ember
- lui passer un objet de configuration au démarrage
Comment ?
“By default, the router will begin [working] once the browser emits the DOMContentReady event.
If you need to defer [this], you can call the application's deferReadiness() method. Once [it] can
begin, call the advanceReadiness() method.”
— Ember API Documentation, Application
La configuration pour sa part est stockée dans un service.
Cas #1 : SPA embarquée - Configuration et démarrage de
l’App
15
Déployer une application embarquée diffère d’une application standard : plus d’index.html pour
indiquer au navigateur les ressources (versionnées !) qu’il doit charger.
Le backend doit être en mesure de générer son équivalent. Nous mettons donc à sa disposition
un index.json à chaque déploiement, listant pour chaque ressource son équivalent versionné.
Il y a un addon pour ça peopledoc/ember-cli-deploy-index-json
Merci !
Cas #1 : SPA embarquée - Déploiement et Fin
Cas #2 : SPA avec
redirections
17
Cas #2 : Objectifs
● Remplacer l’existant par une SPA (au sens strict du terme)
● Utiliser des API
○ comprendre les fonctionnalités actuelles
○ entreprendre la création des API
○ authentification et gestion des droits (Oauth2)
● Avoir une transition visuellement cohérente entre les 2 applications
18
Cas #2 : Méthodologie
● SPA sur une nouvelle infrastructure
● Utilisation de l’ancien site pour le login/logout
○ évite de changer l’infra actuelle
○ évite de changer l’URL d’accès aux utilisateurs
● Migration progressive
○ Reprise de l’existant page par page
○ Utilisation de l’ancien site pour les pages non migré
○ Refonte UX avec prise en compte du mobile
19
Cas #2 : Redirection ancien site vers SPA
Menu 1 Menu 2 Menu 3
Ancien site Nouveau site Ancien site
Menu 1 Menu 2 Menu 3
Ancien site Nouveau site Ancien site
Clic
https://nouveau.monsite.com/menu-2?lang=fr-fr&access_token=ABCDEF....https://monsite.com/menu-1
20
Cas #2 : Redirections
Il faut configurer l’ancien site pour rediriger vers la SPA (Menu 2) et faire évoluer les redirections
au fil du temps.
La redirection vers la SPA se fait avec des query-params:
○ langue courante
○ token d’accès OAuth2
La SPA récupère au démarrage des informations de configuration par un call API sur le domaine
courant
○ Infos d’affichage de menu
○ URLs de l’ancien site pour le Menu-1 et Menu-3
○ Feature flags à activer/désactiver
○ Hostname et namespace pour communiquer avec l’API
21
Cas #2 : Cohérence de design
Possibilité de naviguer d’un site à l’autre sans se rendre compte d’une différence visuelle.
Design cohérent entre l’ancien site et la SPA.
Nouvelle contrainte : mobilité (CSS responsive, PWA…)
Si vous avez des thèmes clients, il faut un service dédié pour délivrer les CSS/logos...
22
Cas #2 : Feature Flags
Nous “feature flaggons” toutes nos fonctionnalités (avec kategengler/ember-feature-flags).
Le backend est responsable de leur activation, c’est pourquoi il passe une liste de la forme
{ flagName1: true, flagName2: false } à notre application.
Hors-sujet : nous avons un addon pour activer nos feature flags directement depuis l’app
https://peopledoc.github.io/ember-feature-controls
23
Cas #2 : API
Pour communiquer avec notre API, notre application a besoin d’un certain d’informations :
- hostname (standard)
- namespace (standard)
- token (notre utilisateur a déjà une session, demandons au backend un token à l’initialisation !)
Si la destination des 2 premiers paramètres suit la logique du framework, token est pour sa part
non standard et nous le passons à un authenticator de simplabs/ember-simple-auth.
24
Cas #2 : Fin

Weitere ähnliche Inhalte

Ähnlich wie Paris ember js lab #6 - Taking over server-side rendering websites

Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web servicesLilia Sfaxi
 
Meetup angular rshop
Meetup angular rshopMeetup angular rshop
Meetup angular rshopCyril Balit
 
Cloud & Google app engine Presentation by Ngiambus Marcus
 Cloud & Google app engine Presentation  by Ngiambus Marcus Cloud & Google app engine Presentation  by Ngiambus Marcus
Cloud & Google app engine Presentation by Ngiambus MarcusMarc NGIAMBA
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
WebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet ApplicationsWebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet ApplicationsVincent Perrin
 
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sKubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sArnaud MAZIN
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement webHouda TOUKABRI
 
Comment Rue Du Commerce est devenu le site e-commerce le plus rapide de France ?
Comment Rue Du Commerce est devenu le site e-commerce le plus rapide de France ?Comment Rue Du Commerce est devenu le site e-commerce le plus rapide de France ?
Comment Rue Du Commerce est devenu le site e-commerce le plus rapide de France ?Fasterize
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSRenaud Dumont
 
Meetup - Construire des applications serverless avec Azure
Meetup - Construire des applications serverless avec AzureMeetup - Construire des applications serverless avec Azure
Meetup - Construire des applications serverless avec AzureSamir Arezki ☁
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Alexandre Touret
 
Rapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my galleryRapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my galleryMOHAMMED MOURADI
 

Ähnlich wie Paris ember js lab #6 - Taking over server-side rendering websites (20)

Cours cordova & REST
Cours cordova & RESTCours cordova & REST
Cours cordova & REST
 
[Tuto] Big datatrack : Web Tracker
[Tuto] Big datatrack : Web Tracker[Tuto] Big datatrack : Web Tracker
[Tuto] Big datatrack : Web Tracker
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
Liste des stages 07 02 2017
Liste des stages 07 02 2017Liste des stages 07 02 2017
Liste des stages 07 02 2017
 
Meetup angular rshop
Meetup angular rshopMeetup angular rshop
Meetup angular rshop
 
Meetup angular rshop
Meetup angular rshopMeetup angular rshop
Meetup angular rshop
 
Cloud & Google app engine Presentation by Ngiambus Marcus
 Cloud & Google app engine Presentation  by Ngiambus Marcus Cloud & Google app engine Presentation  by Ngiambus Marcus
Cloud & Google app engine Presentation by Ngiambus Marcus
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 
12-Factor
12-Factor12-Factor
12-Factor
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
WebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet ApplicationsWebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet Applications
 
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sKubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 
CV_Bilel CHAOUADI
CV_Bilel CHAOUADICV_Bilel CHAOUADI
CV_Bilel CHAOUADI
 
Comment Rue Du Commerce est devenu le site e-commerce le plus rapide de France ?
Comment Rue Du Commerce est devenu le site e-commerce le plus rapide de France ?Comment Rue Du Commerce est devenu le site e-commerce le plus rapide de France ?
Comment Rue Du Commerce est devenu le site e-commerce le plus rapide de France ?
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJS
 
Meetup - Construire des applications serverless avec Azure
Meetup - Construire des applications serverless avec AzureMeetup - Construire des applications serverless avec Azure
Meetup - Construire des applications serverless avec Azure
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
 
Rapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my galleryRapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my gallery
 

Paris ember js lab #6 - Taking over server-side rendering websites

  • 1. Paris EmberJS Lab #6 Novembre 2019
  • 2. 2 Antonin Messinger Projet : ember-cli-deploy-index-json: Générer un json destiné à être consommé par le backend pour construire l’index.html @mr_meuble @amessinger
  • 3. 3 Guillaume Gérard (aka GreatWizard) Projets : GreatWizard/ember-circleci : Générer votre configuration CircleCI pour app ou addons GreatWizard/ember-service-worker-unregistration : Désenregistrer vos services workers peopledoc/ember-feature-controls : Activer / désactiver vos feature flags avec une interface d’administration et permettre de garder l’état dans le localStorage. @ggerard88 @GreatWizard
  • 4. Taking Over Server-side Rendering Websites - Antonin Messinger - Guillaume Gérard
  • 5. 5 PeopleDoc il y a 3 ans ● Application SaaS en Django (server-side rendering) ● Templating avec Bootstrap 2/3 ● Zéro API ● jQuery pour les quelques interactions asynchrones ● Une équipe de trois devs JS ○ Objectif : Faire les projets avec un framework JS moderne (spoiler: EmberJS) ○ Le legacy est énorme
  • 6. Cas #1 : SPA embarquée
  • 7. 7 Cas #1 : SPA embarquée Prend en charge une partie du DOM. Utile lorsque la page est préexistante et rendue par le serveur. Sujets : Routage2DOM1 Feature Flags3 API4 Assets5
  • 8. 8 Cas #1 : SPA embarquée - DOM L’application prend en charge une partie du DOM. “By default, your application will [...] attach [...] to the document's body element. [...] You can [...] append the application template to a different element by specifying its rootElement property” — Ember guides, Changing the Root Element Nous avons donc choisi de faire correspondre rootElement à modulePrefix.
  • 9. 9 Cas #1 : SPA embarquée - Routage Nous voulons une application stateful en tirant avantage du routeur. Problème, notre application est rendue à une URL de base que nous (frontend) ne maîtrisons pas. “[...] indicate to the router what the root URL for your Ember application is [...] by configuring the rootURL property [...]” — Ember guides, Specifying a Root URL Notre application va donc recevoir du backend cette URL de base pour que son routeur n’intervienne qu’à partir de celle-ci.
  • 10. 10 Cette problématique de routage ne se limite pas à l’URL : Notre application se trouve dans une arborescence qu’elle ne connaît pas à priori. Etant servi à l’URL /admin/stats, l’application voudra afficher sa position dans l’arborescence via des breadcrumbs. “Home > Admin > route_actuelle_de_l_app” Le backend va donc la lui indiquer via un paramètre de la forme [{ label: Home’, url: ‘/’ }, { label: Admin, url: ‘/admin’ }] (que nous passons par la suite à poteto/ember-crumbly). Cas #1 : SPA embarquée - Breadcrumbs / useradmin stats
  • 11. 11 Cas #1 : SPA embarquée - Feature Flags Nous “feature flaggons” toutes nos fonctionnalités (avec kategengler/ember-feature-flags). Le backend est responsable de leur activation, c’est pourquoi il passe une liste de la forme { flagName1: true, flagName2: false } à notre application. Side note : nous avons un addon pour activer nos feature flags directement depuis l’app peopledoc/ember-feature-controls
  • 12. 12 Cas #1 : SPA embarquée - API Pour communiquer avec notre API, notre application a besoin de certaines d’informations : - hostname (standard) - namespace (standard) - token (notre utilisateur a déjà une session, demandons au backend un token à l’initialisation !) Si la destination des 2 premiers paramètres suit la logique du framework, token est pour sa part non standard et nous le passons à un authenticator de simplabs/ember-simple-auth.
  • 13. 13 Cas #1 : SPA embarquée - Réutilisation des Assets Notre application peut partager certaines assets avec le backend, pour gagner un peu de cache entre autres. Solution : un paramètre passé du backend au frontend. Ex. iconsPath: “backend.com/assets/icons.svg” Attention, le fait d’avoir un markup HTML venant de deux applicatifs distincts peut poser des problèmes de compatibilité si l’un et l’autre visent des versions différentes du framework UI. Contenu géré par l’app Ember Navigation rendu par le serveur SPA build assetsserver assets Dans la page web : “backend.com/s/icons.svg” Dans un template : “frontend.com/b/icons.svg” “backend.com/s/icons.svg” <html>
  • 14. 14 L’addon xcambar/ember-cli-embedded permet de : - contrôler quand démarre l’application Ember - lui passer un objet de configuration au démarrage Comment ? “By default, the router will begin [working] once the browser emits the DOMContentReady event. If you need to defer [this], you can call the application's deferReadiness() method. Once [it] can begin, call the advanceReadiness() method.” — Ember API Documentation, Application La configuration pour sa part est stockée dans un service. Cas #1 : SPA embarquée - Configuration et démarrage de l’App
  • 15. 15 Déployer une application embarquée diffère d’une application standard : plus d’index.html pour indiquer au navigateur les ressources (versionnées !) qu’il doit charger. Le backend doit être en mesure de générer son équivalent. Nous mettons donc à sa disposition un index.json à chaque déploiement, listant pour chaque ressource son équivalent versionné. Il y a un addon pour ça peopledoc/ember-cli-deploy-index-json Merci ! Cas #1 : SPA embarquée - Déploiement et Fin
  • 16. Cas #2 : SPA avec redirections
  • 17. 17 Cas #2 : Objectifs ● Remplacer l’existant par une SPA (au sens strict du terme) ● Utiliser des API ○ comprendre les fonctionnalités actuelles ○ entreprendre la création des API ○ authentification et gestion des droits (Oauth2) ● Avoir une transition visuellement cohérente entre les 2 applications
  • 18. 18 Cas #2 : Méthodologie ● SPA sur une nouvelle infrastructure ● Utilisation de l’ancien site pour le login/logout ○ évite de changer l’infra actuelle ○ évite de changer l’URL d’accès aux utilisateurs ● Migration progressive ○ Reprise de l’existant page par page ○ Utilisation de l’ancien site pour les pages non migré ○ Refonte UX avec prise en compte du mobile
  • 19. 19 Cas #2 : Redirection ancien site vers SPA Menu 1 Menu 2 Menu 3 Ancien site Nouveau site Ancien site Menu 1 Menu 2 Menu 3 Ancien site Nouveau site Ancien site Clic https://nouveau.monsite.com/menu-2?lang=fr-fr&access_token=ABCDEF....https://monsite.com/menu-1
  • 20. 20 Cas #2 : Redirections Il faut configurer l’ancien site pour rediriger vers la SPA (Menu 2) et faire évoluer les redirections au fil du temps. La redirection vers la SPA se fait avec des query-params: ○ langue courante ○ token d’accès OAuth2 La SPA récupère au démarrage des informations de configuration par un call API sur le domaine courant ○ Infos d’affichage de menu ○ URLs de l’ancien site pour le Menu-1 et Menu-3 ○ Feature flags à activer/désactiver ○ Hostname et namespace pour communiquer avec l’API
  • 21. 21 Cas #2 : Cohérence de design Possibilité de naviguer d’un site à l’autre sans se rendre compte d’une différence visuelle. Design cohérent entre l’ancien site et la SPA. Nouvelle contrainte : mobilité (CSS responsive, PWA…) Si vous avez des thèmes clients, il faut un service dédié pour délivrer les CSS/logos...
  • 22. 22 Cas #2 : Feature Flags Nous “feature flaggons” toutes nos fonctionnalités (avec kategengler/ember-feature-flags). Le backend est responsable de leur activation, c’est pourquoi il passe une liste de la forme { flagName1: true, flagName2: false } à notre application. Hors-sujet : nous avons un addon pour activer nos feature flags directement depuis l’app https://peopledoc.github.io/ember-feature-controls
  • 23. 23 Cas #2 : API Pour communiquer avec notre API, notre application a besoin d’un certain d’informations : - hostname (standard) - namespace (standard) - token (notre utilisateur a déjà une session, demandons au backend un token à l’initialisation !) Si la destination des 2 premiers paramètres suit la logique du framework, token est pour sa part non standard et nous le passons à un authenticator de simplabs/ember-simple-auth.
  • 24. 24 Cas #2 : Fin