-
Notifications
You must be signed in to change notification settings - Fork 0
DEV III
Le Frontend représente la partie visible d’un site ou d’une application web, avec laquelle les utilisateurs interagissent. Il comprend le HTML, le CSS et le JavaScript.
- CMS (Content Management System) : Permet de gérer facilement le contenu d’un site web (ex : WordPress).
- CRM (Customer Relationship Management) : Sert à gérer la relation client (ex : Salesforce).
- ERP (Enterprise Resource Planning) : Outil de gestion intégré des processus d’une entreprise (ex : SAP).
Un préprocesseur CSS est un outil qui étend les fonctionnalités du CSS en permettant l'utilisation de variables, de fonctions, de conditions, etc.
Exemple : Sass, Less.
Un framework CSS est une bibliothèque qui facilite la création de mises en page et de styles standardisés.
Exemples : Bootstrap, Tailwind CSS.
Un framework JS fournit une structure et des outils pour développer plus efficacement des applications web.
Exemples : React, Vue.js, Angular.
- DOM Virtuel : Représentation en mémoire du DOM réel. React utilise cette version virtuelle pour effectuer des mises à jour optimisées.
- Flux/Redux : Architectures de gestion d’état global. Elles permettent de centraliser et de contrôler les données d’une application React.
Un CDN est un réseau de serveurs répartis géographiquement qui permet de distribuer rapidement des fichiers statiques (CSS, JS, images, etc.) à l'utilisateur.
Il améliore les performances et la disponibilité d’un site.
Le Backend est la partie invisible d’un site ou d’une application web. Il gère la logique, les bases de données, les requêtes serveurs, la sécurité et la communication avec le frontend.
- Framework : Fournit une structure complète avec des règles à suivre. Il impose un cadre (ex : Laravel, Django, Express).
- Librairie : Outil spécifique pour résoudre un problème donné. On l’utilise librement dans le code (ex : jQuery, Lodash).
Quelques langages et outils courants :
- Langages : PHP, Python, Java, JavaScript (Node.js), Ruby, Go.
- Bases de données : MySQL, PostgreSQL, MongoDB.
- Serveurs : Apache, Nginx.
- APIs : REST, GraphQL.
Un gestionnaire de paquet permet d’installer, de mettre à jour et de gérer les dépendances d’un projet.
Exemples :
-
npmpour Node.js -
pippour Python -
composerpour PHP
Choisir une technologie dépend de plusieurs critères :
- Objectifs du projet
- Compétences de l’équipe
- Écosystème et documentation
- Scalabilité, performance, sécurité
- Communauté et support
Une stack est un ensemble de technologies utilisées ensemble pour développer une application.
Exemples :
- LAMP : Linux, Apache, MySQL, PHP
- MERN : MongoDB, Express, React, Node.js
- Django + PostgreSQL
Les opérations de base sur les données sont regroupées sous l’acronyme CRUD :
- Create : Ajouter une donnée
- Read : Lire une donnée
- Update : Modifier une donnée
- Delete : Supprimer une donnée
Un schéma Entité-Association (E-A) est un modèle conceptuel qui permet de représenter les entités (objets) d’un système et leurs relations.
Utilisé pour concevoir une base de données relationnelle avant sa mise en œuvre.
Les Systèmes de Gestion de Base de Données relationnels (SGBDR) utilisent des tables avec des relations (liens entre données).
Exemples : MySQL, PostgreSQL, SQLite, Oracle.
Les bases NoSQL sont conçues pour gérer de grands volumes de données, souvent non structurées ou semi-structurées.
Caractéristiques :
- Pas de schéma strict
- Scalabilité horizontale (ajout de serveurs)
- Performances élevées pour des cas spécifiques
- Clé-valeur (ex : Redis)
- Colonnes (ex : Cassandra)
- Documents (ex : MongoDB)
- Graphes (ex : Neo4j)
- ORM (Object-Relational Mapping) : Outil qui fait le lien entre une base relationnelle et des objets dans le code (ex : Sequelize avec Node.js & PostgreSQL).
- ODM (Object-Document Mapping) : Similaire à l’ORM, mais pour les bases NoSQL (ex : Mongoose avec MongoDB).
Les migrations sont des scripts permettant de versionner et de gérer les modifications de structure de la base de données dans le temps (création/modification de tables, colonnes, etc.).
Elles assurent la synchronisation entre le code et la base de données.
Une API (Application Programming Interface) permet à deux systèmes logiciels de communiquer entre eux.
Elle expose des fonctionnalités ou des données via des points d’accès (endpoints).
- REST : Le plus courant, basé sur le protocole HTTP et les méthodes standards (GET, POST, PUT, DELETE).
- GraphQL : Permet aux clients de spécifier précisément les données qu’ils veulent.
- SOAP : Plus ancien, basé sur XML et utilisé surtout dans des environnements d’entreprise.
- Utilisation des méthodes HTTP : GET (lire), POST (créer), PUT/PATCH (modifier), DELETE (supprimer).
- Utilisation de statuts HTTP pour indiquer le résultat (ex : 200, 201, 404, 500).
- Structure des endpoints claire et hiérarchique (ex :
/users/123/posts). - Architecture stateless (chaque requête est indépendante).
Le routage permet d’associer des URL à des fonctions ou des contrôleurs qui gèrent les requêtes.
Chaque route utilise une méthode HTTP et peut renvoyer une réponse en JSON, XML, etc.
Un middleware est une fonction qui s’exécute entre la réception d’une requête et l’envoi de la réponse.
Exemples :
- Authentification
- Logger (journalisation)
- Validation des données
- Gestion des erreurs
Une API bien conçue doit :
- Gérer les erreurs côté serveur
- Retourner des codes d’erreur explicites (ex : 400, 401, 403, 500)
- Fournir un message clair dans la réponse (
message,error, etc.)
La documentation permet aux développeurs de comprendre comment utiliser l’API :
- Décrire les endpoints disponibles
- Expliquer les paramètres, réponses, erreurs
- Fournir des exemples de requêtes
Swagger est un outil qui permet de :
- Documenter automatiquement une API REST
- Générer une interface utilisateur pour tester les endpoints
- Créer un fichier standardisé (
OpenAPI) pour décrire l’API
- UX (User Experience) : L’expérience vécue par l’utilisateur lors de l’utilisation d’un produit ou service.
- UI (User Interface) : L’interface graphique avec laquelle l’utilisateur interagit (boutons, menus, couleurs…).
- Comprendre les besoins utilisateurs
- Créer des parcours intuitifs et accessibles
- Réduire la friction et les efforts cognitifs
- Tester et itérer régulièrement
10 règles pour améliorer l’utilisabilité, dont :
- Visibilité de l’état du système
- Liberté et contrôle utilisateur
- Cohérence et standards
- Prévention des erreurs
- Reconnaissance plutôt que mémorisation
Plus il y a d’options, plus la prise de décision est lente.
➡️ Moins d’options = navigation plus rapide.
Les qualités d’une bonne expérience utilisateur :
- Useful (utile)
- Usable (utilisable)
- Desirable (désirable)
- Findable (facile à trouver)
- Accessible (accessible à tous)
- Credible (crédible)
- Hiérarchie visuelle
- Contraste
- Alignement
- Cohérence
- Feedback visuel (hover, clic…)
Permet de modifier le style pour l’impression :
@media print { body { background: white; color: black; } }
Permettent d’adapter le style d’un site selon la taille de l’écran (responsive design) :
@media (max-width: 768px) { .menu { display: none; } }
Acronyme pour 4 grands principes fondamentaux du design visuel :
- Contrast : Distinguer les éléments importants
- Repetition : Réutiliser les mêmes éléments pour la cohérence
- Alignment : Bien aligner les éléments pour une lecture claire
- Proximity : Regrouper les éléments liés ensemble
Outils couramment utilisés pour créer des maquettes et prototypes interactifs :
- Figma
- Adobe XD
Étapes pour transformer une maquette en composants réutilisables :
- Identifier les éléments récurrents (ex : boutons, cartes, en-têtes…)
- Isoler chaque composant avec ses propres styles et fonctionnalités
- Structurer l’interface selon une approche design system pour assurer la cohérence globale
Le testing est l’ensemble des pratiques qui visent à vérifier que le code fonctionne comme prévu et à éviter les régressions lors des évolutions d’un projet.
Le Pyramid Testing est une stratégie qui recommande d’écrire :
- Beaucoup de tests unitaires
- Moins de tests d’intégration
- Peu de tests End-to-End
👉 Cela optimise la rapidité, la fiabilité et le coût du testing.
Il existe une grande variété de tests, chacun ayant un objectif précis :
- Tests unitaires
- Tests d’intégration
- Tests fonctionnels
- Tests End-to-End (E2E)
- Tests de performance
- Tests de sécurité
- Tests exploratoires
- Tests manuels / automatisés
- Boîte noire : Test sans connaissance du code source. On vérifie uniquement les entrées/sorties.
- Boîte blanche : Test avec connaissance du code interne (structure, logique…).
Les tests unitaires valident le bon fonctionnement d’une unité isolée de code (fonction, méthode…).
Les tests d’intégration vérifient que plusieurs composants interagissent correctement entre eux.
Outils simulant des parties du code dans un test :
- Mock : Simule un objet avec des comportements spécifiques.
- Stub : Fournit des réponses prédéfinies.
- Spy : Enregistre l’utilisation faite d’une fonction (appel, arguments…).
- Fake : Remplace une dépendance par une version simple mais fonctionnelle.
Les tests End-to-End simulent un scénario utilisateur complet du début à la fin (ex : remplir un formulaire, valider une commande…).
👉 Utilisés pour tester toute l'application, de l’interface utilisateur jusqu’à la base de données.
- TDD (Test-Driven Development) : On écrit d’abord les tests, puis le code pour les faire passer.
-
BDD (Behavior-Driven Development) : Variante centrée sur le comportement attendu, souvent en langage naturel (ex :
Given / When / Then).
Quelques outils et concepts utiles :
-
Matchers : Fonctions pour vérifier les valeurs attendues (ex :
expect(value).toBe(42)) - Jest : Framework de test pour JavaScript
- Mocha/Chai : Outils pour les tests unitaires JS
- Sinon.js : Pour les mocks, stubs et spies
- Cypress / Playwright : Pour les tests E2E
La couverture de code mesure la part du code qui est exécutée par les tests.
👉 Plus le pourcentage est élevé, plus les tests couvrent le projet, mais cela ne garantit pas une qualité suffisante.
Voici un résumé clair et synthétique de la partie "Processus de déploiement" :
-
Mise à disposition d’une application sur un serveur pour qu’elle soit accessible aux utilisateurs (via navigateur, mobile…).
-
Se fait en plusieurs étapes : développement → tests → packaging → staging → production.
-
Développement & test : pour les développeurs, base de données limitée.
-
Acceptance : version stable pour que les analystes/client testent.
-
Simulation (Staging) : copie presque exacte de la production.
-
Production : version finale, à manipuler avec prudence.
-
Même serveur : Frontend + API ensemble → simple, mais limité.
-
Serveurs séparés : meilleure performance et scalabilité, mais complexité CORS.
-
Cloud : AWS, Azure, GCP → scalable, sécurisé, nécessite compétences.
-
Conteneurisation : via Docker ou Kubernetes → portabilité et cohérence.
| Critère | Dédié | Partagé | VPS | Cloud |
|---|---|---|---|---|
| Ressources | Exclusives | Partagées | Virtualisées | Élastiques |
| Contrôle | Total | Limité | Élevé | Variable |
| Sécurité | Très bonne | Moyenne | Bonne | Élevée (dépend du provider) |
| Coût | Élevé | Faible | Moyen | Variable selon usage |
| Scalabilité | Limitée | Faible | Flexible | Excellente |
-
Stockent des informations sensibles : mots de passe, clés API, etc.
-
Ne jamais mettre ces infos dans le code ou GitHub.
-
Exemple fichier
.env:DB_HOST=localhost DB_USER=api_user DB_PASS=securepassword
-
Créer un
Dockerfile. -
Construire l’image (
docker build). -
Tester localement (
docker run). -
Pousser sur DockerHub (
docker push). -
Sur le VPS :
docker pullpuisdocker run.
-
Build de l’application (
npm run build --prod→ dossierdist). -
Transfert via
scp:scp -r ./dist/my-app-name/* user@ip:/var/www/html -
Doit être hébergé sur un serveur web (ex. Nginx).
-
Le déploiement, c’est plus qu’un simple upload : c’est un processus structuré.
-
Il faut choisir la bonne stratégie, le bon environnement et le bon outil.
-
Docker et SCP sont deux solutions courantes selon le type d’application.
Voici un résumé structuré du contenu des diapositives concernant GitHub Actions et DevOps :
Développement Informatique III - Concepts DevOps via GitHub Actions
-
Introduction à DevOps :
- DevOps vise à améliorer la collaboration entre les équipes de développement et d'opérations.
- Objectifs : accélérer les déploiements, améliorer la fiabilité, et augmenter la rapidité de réponse aux changements.
-
Principes fondamentaux de DevOps :
- Automatisation des processus de tests, déploiement, et surveillance.
- Intégration Continue (CI) : Automatisation de l'intégration du code et des tests à chaque modification.
- Déploiement Continu (CD) : Automatisation du déploiement pour des livraisons rapides et fiables.
- Surveillance continue des performances et réponse rapide aux incidents.
-
GitHub Actions :
- Automatisation des workflows directement dans GitHub.
- Workflows : Séquences de tâches définies dans des fichiers YAML.
- Actions : Tâches individuelles qui composent un workflow.
- Runners : Serveurs qui exécutent les workflows.
- Événements : Déclencheurs comme les pushs, pull requests, etc.
-
Workflows GitHub Actions :
- Workflow de base : Déclenchement sur chaque push ou pull request avec des actions comme l'installation de Node.js, l'exécution de tests, etc.
- Workflow de tests : Exécution de tests unitaires et d'intégration de manière automatisée.
-
Workflow de déploiement : Automatisation du déploiement lors d'un push sur la branche
main, y compris l'installation des dépendances et le déploiement sur un serveur de production. - Workflow de monitoring : Vérification régulière de la santé de l'application, création d'une issue en cas d'échec.
- Workflow de sécurité : Exécution de scans de sécurité (ex. OWASP ZAP) à chaque push pour détecter les vulnérabilités.
-
Résumé :
- Récapitulation des concepts DevOps et des différents workflows GitHub Actions.
Voici un résumé structuré du contenu des diapositives concernant GitHub Actions et DevOps :
Développement Informatique III - Concepts DevOps via GitHub Actions
-
Introduction à DevOps :
- DevOps vise à améliorer la collaboration entre les équipes de développement et d'opérations.
- Objectifs : accélérer les déploiements, améliorer la fiabilité, et augmenter la rapidité de réponse aux changements.
-
Principes fondamentaux de DevOps :
- Automatisation des processus de tests, déploiement, et surveillance.
- Intégration Continue (CI) : Automatisation de l'intégration du code et des tests à chaque modification.
- Déploiement Continu (CD) : Automatisation du déploiement pour des livraisons rapides et fiables.
- Surveillance continue des performances et réponse rapide aux incidents.
-
GitHub Actions :
- Automatisation des workflows directement dans GitHub.
- Workflows : Séquences de tâches définies dans des fichiers YAML.
- Actions : Tâches individuelles qui composent un workflow.
- Runners : Serveurs qui exécutent les workflows.
- Événements : Déclencheurs comme les pushs, pull requests, etc.
-
Workflows GitHub Actions :
- Workflow de base : Déclenchement sur chaque push ou pull request avec des actions comme l'installation de Node.js, l'exécution de tests, etc.
- Workflow de tests : Exécution de tests unitaires et d'intégration de manière automatisée.
-
Workflow de déploiement : Automatisation du déploiement lors d'un push sur la branche
main, y compris l'installation des dépendances et le déploiement sur un serveur de production. - Workflow de monitoring : Vérification régulière de la santé de l'application, création d'une issue en cas d'échec.
- Workflow de sécurité : Exécution de scans de sécurité (ex. OWASP ZAP) à chaque push pour détecter les vulnérabilités.
-
Résumé :
- Récapitulation des concepts DevOps et des différents workflows GitHub Actions.
Voici un résumé des concepts clés abordés :
-
Authentification HTTP Basic : Un mécanisme simple d'authentification via un nom d'utilisateur et un mot de passe encodé en Base64. Peu sécurisé, à utiliser uniquement avec HTTPS.
-
Authentification HTTP Digest : Plus sécurisé que Basic, utilise des hachages pour transmettre les informations d'identification, ce qui empêche l'envoi de mots de passe en clair.
-
Authentification basée sur les sessions : Couramment utilisée dans les applications web pour maintenir l'état de l'utilisateur via un identifiant de session.
-
Authentification basée sur les jetons : Souvent utilisée pour les API et applications modernes (comme les SPA). Les jetons (comme JWT) sont envoyés avec chaque requête et permettent une authentification stateless.
-
JWT (JSON Web Token) : Un standard pour l'authentification basé sur des tokens contenant des informations (encodées en Base64 URL-safe). Ils comprennent un en-tête, un payload et une signature.
-
OAuth et OpenID Connect : OAuth gère l'autorisation, tandis qu'OpenID Connect ajoute la gestion de l'identité. Ces protocoles sont souvent utilisés ensemble pour des systèmes sécurisés d'authentification et d'autorisation.
-
Jeton Opaque : Un type de jeton dont le contenu est inintelligible pour le client, et les données sont stockées côté serveur.
Voici un résumé des concepts clés de cette présentation sur les mesures de sécurité en développement informatique :
-
Injections SQL :
- Les attaques par injection SQL visent à manipuler des requêtes SQL via des entrées utilisateur pour accéder à des données non autorisées.
- Pour se protéger, il faut utiliser des requêtes paramétrées et valider les entrées côté frontend.
-
Renforcement de la sécurité des sessions :
-
La protection des informations sensibles repose sur des cookies sécurisés :
- HttpOnly : Empêche l'accès aux cookies via JavaScript.
- Secure : Assure que les cookies sont envoyés uniquement sur HTTPS.
- SameSite : Contrôle l'envoi des cookies lors de requêtes inter-sites pour prévenir les attaques CSRF.
-
-
Cross-Site Scripting (XSS) :
-
Les attaquants injectent des scripts JavaScript malveillants pour voler des informations.
-
Trois types :
- Reflected XSS : Script exécuté immédiatement via une URL manipulée.
- Stored XSS : Le script malveillant est stocké sur le serveur et exécuté plus tard.
- DOM-based XSS : Exploite les manipulations du DOM dans le navigateur.
-
La protection passe par la validation, l'échappement des entrées et l'utilisation de méthodes sécurisées pour manipuler le DOM.
-
-
Cross-Site Request Forgery (CSRF) :
- Une attaque où un utilisateur authentifié est forcé d'exécuter des actions non désirées sur une application.
- La protection inclut l'utilisation de tokens anti-CSRF, la vérification des en-têtes "Referer" et "Origin", et l'utilisation de l'attribut SameSite pour les cookies.
-
Autres bonnes pratiques de sécurité :
- Contrôles d'accès aux ressources via
.htaccess, restreindre l'accès aux dossiers, forcer la redirection HTTP vers HTTPS, et appliquer des principes de contrôle d'accès basés sur des rôles (RBAC, ABAC).
- Contrôles d'accès aux ressources via
Enfin, il est important d'appliquer ces mesures de sécurité dans tous les projets web pour garantir la protection des utilisateurs et des données. Le cours sur l'optimisation des performances web aborde plusieurs stratégies techniques pour améliorer la vitesse de chargement des sites et ainsi l'expérience utilisateur. Voici un résumé des principaux concepts :
-
Intérêt de l'optimisation :
- Elle est cruciale pour le SEO, l'expérience utilisateur, l'économie de ressources et la réduction du taux de rebond (Bounce Rate).
-
Minification :
- Consiste à supprimer les espaces, commentaires et autres caractères inutiles dans les fichiers pour réduire leur taille.
-
Hébergement :
- La performance dépend du type de stockage (SSD recommandé), de la RAM et de la bande passante fournie par le serveur.
-
Images :
- Il est important d'optimiser la taille, la qualité et le format des images (JPEG, PNG, GIF, WebP) pour améliorer le temps de chargement. Utiliser le lazy loading pour charger les images uniquement lorsque l'utilisateur en a besoin.
-
Asynchrone et Scripts :
- Charger certaines ressources de manière asynchrone pour ne pas ralentir le rendu initial de la page.
-
Compression Gzip :
- Cette technique permet de compresser des fichiers comme HTML, CSS et JavaScript jusqu'à 90% pour réduire le poids des fichiers et accélérer les transferts.
-
Pre-fectching, Pre-loading, Pre-rendering :
- Ces techniques permettent de précharger ou de pré-rendre des ressources pour améliorer la vitesse de réponse du site. Cela inclut la pré-résolution des DNS ou le pré-chargement de fichiers CSS et autres ressources.
-
KPI (Key Performance Indicators) :
- Des mesures comme le taux de rebond, le First Byte, le First Contentful Paint, et d'autres indicateurs clés permettent de mesurer l'efficacité des optimisations.
-
Outils :
- Plusieurs outils de test de performance sont mentionnés : Google PageSpeed Insights, Webpagetest, Locust.io (pour tester la charge) et Request Map Generator pour visualiser les requêtes d'une page.
En conclusion, l'optimisation des performances web ne se limite pas à quelques techniques mais englobe une série de stratégies qui peuvent avoir un impact significatif sur la rapidité du site, l'expérience utilisateur et l'empreinte carbone numérique.