% INF5190 — Programmation Web avancée % UQAM — Département d'informatique % Plan de cours — Automne 2021 * Horaires, locaux et enseignants: * Site web du cours: Responsable(s) du cours ======================= Coordination ------------ Beaudry, Éric PK-4635 Enseignement ------------- Berger, Jacques PK-4115 Groupes: 030 Description du cours ==================== Objectifs --------- Ce cours introduit aux méthodes avancées et aux bonnes pratiques de conception et de développement d'applications Web modernes. Sommaire du contenu ------------------- Infrastructure et cadre de développement Web ; intégration d'une base de données ; authentification ; conception de services web ; formats de sérialisation ; gestion d'erreurs ; interopérabilité ; déploiement de services ; tests de charge ; sécurité et patrons d'attaques spécifiques aux applications web. Modalité d'enseignement ----------------------- Ce cours comporte une séance obligatoire de laboratoire (2 heures par semaine). Préalables académiques ---------------------- - INF3080 - Bases de données - INF3190 - Introduction à la programmation Web Contenu du cours ================ - Rappel et historique du développement web : évolution des protocoles (Gopher, HTTP, HTTP2), sites statiques, langages de script côtés client et côtés serveur, plugins de navigateurs (Flash, Java applets, Silverlight), Ajax, HTML5; - Fonctionnement d'une application Web : requêtes HTTP, ressources, balanceurs de charge, Cookie/Local storages, stratégies d'optimisations (caches locales, caches de protocole HTTP, caches applicatives); - Architecture d'une application web : MVC, middlewares, différents types de tests (unitaires, fonctionnels et d'intégrations, de navigateurs, bout en bout), websockets; - *Model* : Intégration d'une base de données : différents types de bases de données (NoSQL, relationnel, distribué, key-value store), ORM, modélisation du modèle, migrations; - *View* : Engins de templating HTML, formats de sérialisation (JSON, XML, Protocol Buffers), localisation (l10n) et internationalisation (i18n); - *Controller*: Gestion de contrôle : authentification (API, JWT, HTTP, authentification basée sur des certificats), validation de l'entrée et gestion d'erreurs; - Maintenance d'une application web : gestion des logs d'erreurs, observabilité, métriques opérationnelles, métriques d'acceptabilité (SLA, SLO), modèle SRE (Site Reliability Engineer); - Interopérabilité d'une application web et micro services : RPC (gRPC, HTTP), REST, découvertes de services; - Résilience et performances d'une application web : tests de charge, requêtes n+1, pagination, disjoncteurs et contrôles de flux, tâches en arrière plan et récurrentes, réseau de diffusion de contenu (Content Delivery Network); - Virtualisation et conteneurs : virtualisation et émulation de systèmes d'exploitations, isolation, quotas de ressources, conteneurs, orchestration (Kubernetes) - Déploiement d'une application web : Platform as a Service (PaaS: Heroku, Google AppEngine), Infrastructure as a Service (IaaS: AWS, GCP), déploiement continu, déploiements progressifs et de canaries; Calendrier ========== Séance 1 -------- Introduction à la programmation web avancée : Présentation du cours; retour sur le protocole HTTP; mise à niveau sur les manipulations usuelles et des outils du développement web. Séance 2 -------- Mise en place de la pile technologique : Choix des technologies lors d'un projet web, stratégies de programmation dans un environnement polyglotte; introduction aux langages techniques. Séance 3 -------- Mise en place de la pile technologique : Apprentissage d'un framework de développement web pour le développement backend; bonnes pratiques et connaissances générales en lien avec cet environnement technique. Séance 4 -------- Intégration avec une base de données : Apprentissage d'un SGMC conçu pour les applications web; manipulations du SGMC; enjeux de déploiements, de concurrence et de sécurité liés aux bases de données. Séance 5 -------- Développement full-stack : Intégration des concepts de développement front-end acquises en INF3190 à la pile technogique complète; partage des responsabilités; gestion des erreurs; traitements asynchrones et conception par composants. Séance 6 -------- Développement avancé : Mise en place de stratégies d'authentification sécuritaires; théorie sur le chiffrement et le hashage; stockage des mots de passe de façon sécuritaire; transfert et stockage de fichiers. Séance 7 -------- Échanges de données : Étude des formats d'échanges de données web; sérialisation des données; gestion de l'encodage de caractères; enjeux de compatibilité. Séance 8 -------- Internationalisation (i18n) et services web : Développement et maintenance des applications multilingues; introduction aux services web. Séance 9 -------- Services web : Conception et intégration de services; concepts de services RESTful; bonnes pratiques; architecture en microservices. Séance 10 --------- Maintenabilité des applications web : Gestion et évolution de la pile technologique; gestion d'erreurs; documentation du logiciel et des services. Séance 11 --------- Déploiement : Gestion de l'environnement de déploiement; conception de l'architecture de déploiement; protocoles d'échanges sécuritaires; load balancing; reverse-proxies; déploiement en infonuagique. Séance 12 --------- Sécurité et performance : Enjeux de sécurité d'une application web; patrons communs d'attaques d'une application web; analyse de la performance et tests de charge. Séance 13 --------- Tests : Intégration d'un cadre de tests unitaires à la pile technologique; outils de tests fonctionnels automatisés. Modalités d'évaluation ====================== Description sommaire Date Pondération ---------------------- ------------------ ------------- Examen intra 27 octobre 2021 25% Examen final 15 décembre 2021 25% TP (mise à niveau) 20 octobre 2021 15% Projet de session 12 décembre 2021 35% Un travail remis en retard reçoit la note zéro à moins d'avoir fait l'objet d'une entente préalable avec le professeur. Le détail des conditions de réalisation du travail de session est précisé avec la description de celui-ci. La qualité du français fait partie intégrante des critères d'évaluation des travaux et des examens jusqu'à un maximum de 25%. La note de passage du cours est de 60% pour l'ensemble de l'évaluation et de 50% pour les deux examens combinés. Médiagrahie =========== - Matt Makai. Full Stack Python Supporter's Edition. [Disponible gratuitement](https://www.fullstackpython.com/table-of-contents.html) - Betsy Beyer, Chris Jones, Jennifer Petoff et Niall Richard Murphy. Site Reliability Engineering: How Google Runs Production Systems. O'Reilly Media (2016). [Disponible gratuitement](https://landing.google.com/sre/books/) - Michael T. Nygard. Release It!: Design and Deploy Production-Ready Software. Pragmatic Bookshelf (2007)