Aller au contenu principal

#Slides : Backend pratique

#Executive Summary

  • HTTP et serveurs : un contrat requête/réponse explicite (statuts 200/201/204/400/401/403/404/409/422/429/500, erreurs Problem Details avec traceId), timeouts, limitation de débit et arrêt gracieux.
  • REST : ressources nommées (pas des actions), Location sur 201, concurrence par ETag/If-Match (412), pagination par curseur {created_at, id}, idempotence par Idempotency-Key, versionnage seulement sur rupture de contrat.
  • Authentification : frontières de menace (navigateur, réseau, origine), Argon2 salé, sessions serveur en cookies HttpOnly/Secure/SameSite, rotation d’ID anti-fixation, JWT avec iss/aud/alg validés et révocation, CSRF par double-submit.
  • Persistance : modélisation (users, sessions, posts), migrations numérotées immuables, index composites selon « égalité → plage → tri », isolation adaptée à la zone critique, contrôle optimiste par version, backups testés.
  • Tests et observabilité : pyramide pragmatique (unitaires, intégration, contrats, E2E, perf), base de tests éphémère, logs JSON corrélés par traceId, métriques (taux d’erreur, p50/p95/p99, débit, saturation).

#Talking Points

  1. Un 500 sans traceId est une investigation à l’aveugle ; un Problem Details avec traceId est une recherche dans les logs.
  2. 403 sur une ressource privée confirme son existence ; 404 la protège.
  3. Un token dans localStorage est volable par la moindre XSS ; un cookie HttpOnly ne l’est pas.
  4. If-Match + 412 rendent au client la résolution de conflit ; l’API reste simple.
  5. Une migration appliquée est immuable : on corrige par une nouvelle migration.
  6. Un test qui n’a jamais échoué ne prouve rien (prouvez le rouge au moins une fois).
  7. La p99 qui grimpe sans la p50 pointe des requêtes lentes, pas une saturation globale.
  8. Une sauvegarde non restaurée n’existe pas : chronométrez la restauration.

#Visual anchors

  • Flow : Client → API → DB → réponse 201 + cookie, pour raconter le fil rouge POST /signup d’une traite.
  • Séquences : timeouts et arrêt gracieux (Proxy/API) ; mise à jour conditionnelle ETag ; rotation de refresh tokens ; traçage d’une requête vers l’observabilité.
  • Interactifs : cycle requête-réponse (HttpLifecycleVisualizer), cache HTTP HIT/MISS/304, explorateur d’en-têtes, limiteur token bucket, arrêt gracieux, CORS, retry avec jitter.
  • Schéma simple de base : trois tables reliées (users 1-n sessions, users 1-n posts) avec l’index composite (author_id, created_at DESC) annoté.

#Bloom Levels

  • Se souvenir / Comprendre : statuts HTTP, anomalies d’isolation, frontières XSS/CSRF/fixation.
  • Appliquer : écrire un Problem Details, un cookie de session sécurisé, un index composite, un triplet de tests.
  • Analyser : lire un EXPLAIN, choisir 404 vs 403, diagnostiquer p50 vs p99.
  • Évaluer : sessions serveur vs JWT selon le contexte, migration en deux temps pour un DROP COLUMN.
  • Créer : assembler le POST /signup complet du mini-atelier (validation, Argon2, cookie, 409, test de contrat).
  • Prérequis : reseaux-web/http.mdx (protocole), bases-sql/select.mdx et bases-sql/join.mdx (SQL élémentaire).
  • Approfondissements : securite-appliquee/auth-web.mdx (attaques web en detail), bases-sql/transactions.mdx (isolation avancee), systemes-distribues/idempotence-exactly-once.mdx (retries et doubles ecritures).
  • Suite logique : devops-cloud/observabilite.mdx (metriques et alertes en production), projet-synthese/index.mdx (projet final).