% INF5190 — Programmation Web avancée % UQAM — Département d'informatique % Plan de cours — Automne 2020 * Horaires, locaux et enseignants: * Site web du cours: Responsable(s) du cours ======================= Coordination ------------ Mosser, Sébastien PK-4820 Enseignement ------------- Simard, Carl 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; Horaire ======= L'horaire présenté est à titre indicatif et peut changer tout au long de la session. Il y aura 15 séances de cours à distance avec le contenu suivant : Séance 1 -------- - Cours: Présentation du cours, Histoire du dévelopement web, Introduction au cadriciel - Laboratoire : Introduction au J2EE, création d'une application web simple Séance 2 -------- - Cours : (Suite) Introduction au cadriciel, fonctionnement d'une application web - Laboratoire : Utilisation des Java Beans et JSP Séance 3 -------- - Cours : Architecture d'une application web, introduction modèle MVC - Laboratoire : Utilisation des dto, dao et fichiers Séance 4 -------- - Cours : Modèle MVC : Controller - Laboratoire : Intégration du framework Struts à une application web Séance 5 -------- - Cours : Modèle MVC : View - Laboratoire : Formulaires, JSTL, validation et gestion d'erreurs Séance 6 -------- - Cours : Modèle MVC : Modèle, gestion des données, cookies, sessions - Laboratoire : Intégration d'une base de données à une application web Séance 7 -------- - Cours : Révision - Laboratoire : Aide pour le projet de session partie 1 Séance 8 -------- - Devoir à la maison Séance 9 -------- - Cours : Maintenance d'une application web, interopérabilité d'une application web - Laboratoire : Intégration de métriques d'observabilité, introductions des tests unitaires et des logs Séance 10 --------- - Cours : Services, résilience d'une application web - Laboratoire : Création et/ou utilisation d'un service externe Séance 11 --------- - Cours : Performance et sécurité d'une application web - Laboratoire : Intégration d'une authentification avec une application web, gestion des insertions SQL Séance 12 --------- - Cours : Virtualisation et conteneurs - Laboratoire : Création d'une image docker de l'application web Séance 13 --------- - Cours : Déploiement d'une application web - Laboratoire : Déploiement de l'application web Séance 14 --------- - Cours : Révision - Laboratoire : Aide pour le projet de session partie 2 Séance 15 --------- - Examen final Modalités d'évaluation ====================== Description sommaire Date Pondération ---------------------- ------------------ ------------- Devoir 28 octobre 2020 20% Examen final 16 décembre 2020 30% Projet de session Partie 1 28 octobre 2020 20% Partie 2 16 décembre 2020 30% 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. Le projet de session doit se faire en équipe. Projet de session ----------------- Le projet de session consiste à développer et déployer une application web complète. Cette application sera développée avec le langage de programmation J2EE. Médiagrahie =========== - Danny Coward. Java EE 7: The Big Picture. - Arun Gupta. Java EE 7 Essentials: Enterprise Developer Handbook. - 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)