% INF5190 — Programmation Web avancée % UQAM — Département d'informatique % Plan de cours — Hiver 2020 * Horaires, locaux et enseignants: Responsable(s) du cours ======================= Coordination ------------ Mosser, Sébastien PK-4820 poste 3904 Enseignement ------------- Berger, Jacques PK-4115 poste 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 13 séances de cours avec le contenu suivant : Séance 1 -------- - Présentation du cours - Rappel au dévelopement web Séance 2 -------- - Introduction à Python Séance 3 -------- - Flask - PEP8 Séance 4 -------- - Intégration d'une BD - SQLite Séance 5 -------- - Développement front-end asynchrone (Ajax) Séance 6 -------- - Authentification - Transfert de fichiers Séance 7 -------- - Formats d'échange de données (json, xml, etc) - Encodage de caractères Séance 8 -------- - Internationalization - Services web (rest, soa) Séance 9 -------- - Intégration de services - Conception de services Séance 10 --------- - Gestion d'erreurs - Documentation de services Séance 11 --------- - HTTPS - Proxy - Cloud Séance 12 --------- - Architecture en microservices - Tests de charge Séance 13 --------- - Tests fonctionnels automatisés Modalités d'évaluation ====================== Description sommaire Date Pondération ---------------------- ----------------- ------------- Examen intra 2 mars 2020 30% Examen final 20 avril 2020 30% Travail individuel 19 février 2020 15% Projet de session 22 avril 2020 25% 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 projet de session peut se faire individuellement ou en équipe de deux. 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 Python et le cadriciel de développement Flask. 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)