Advanced Ecosystem 76 termes

76 termes affichés

TypeBestPractice Concept Method Security Tool
Niveau 🟢 Junior 🟡 Mid 🔴 Senior

2FA / MFA

Advanced Ecosystem 🟡 Mid

Authentification multi-facteurs combinant quelque chose que l'utilisateur sait (mot de passe), possède (téléphone/clé) ou est (biométrie). Réduit drastiquement les compromissions.

Entrer dans un coffre-fort de banque avec une clé ET un code : voler l'un sans l'autre est inutile.

import { authenticator } from 'otplib';
const secret = authenticator.generateSecret();
const qrUrl = authenticator.keyuri(user.email, 'MyApp', secret);
// Verification
const isValid = authenticator.verify({
  token: userInput, secret: user.totpSecret
});

Cas d'usage : Ajouter une couche de sécurité obligatoire pour les comptes admin et les opérations sensibles.

Anti-pattern : Envoyer les codes 2FA uniquement par SMS, vulnérable au SIM swapping.
#security#authentication

Algolia

Advanced Ecosystem 🟢 Junior

Service SaaS de recherche instantanée avec typo-tolerance, facettes et analytics intégrés. Offre des widgets UI prêts à l'emploi (InstantSearch).

Un moteur de recherche Google clé en main pour votre propre site, avec résultats en moins de 50ms.

import algoliasearch from 'algoliasearch';
const client = algoliasearch('APP_ID', 'SEARCH_KEY');
const index = client.initIndex('products');
const { hits } = await index.search('iphone', {
  filters: 'price < 1000',
  hitsPerPage: 20,
});

Cas d'usage : Ajouter rapidement une recherche performante sur un site e-commerce ou une documentation.

Anti-pattern : Indexer des millions de records sans optimiser les attributs searchable, explosant les coûts.
#search#saas

API Key Management

Advanced Ecosystem 🟡 Mid

Bonnes pratiques de gestion des clés API : génération sécurisée, stockage hashé côté serveur, rotation régulière, scoping des permissions et révocation.

Des clés de voiture numérotées avec un registre : on sait qui a quelle clé, on peut la désactiver à distance.

const apiKey = `sk_live_${crypto.randomBytes(32).toString('hex')}`;
// Store only hash in DB
const hash = crypto.createHash('sha256').update(apiKey).digest('hex');
await db.insert({ hash, userId, permissions: ['read'], expiresAt });

Cas d'usage : Fournir un accès programmatique à votre API avec traçabilité et contrôle granulaire.

Anti-pattern : Stocker les clés API en clair dans la base de données ou les committer dans le code source.
#security#api

Brute Force Protection

Advanced Ecosystem 🟡 Mid

Ensemble de techniques pour empêcher les attaques par force brute sur l'authentification : lockout progressif, CAPTCHA, délai exponentiel entre les tentatives.

Un coffre-fort qui ajoute 10 secondes d'attente supplémentaires après chaque mauvais code, rendant le crochetage impraticable.

const attempts = await getLoginAttempts(email);
if (attempts > 5) {
  const delay = Math.pow(2, attempts - 5) * 1000;
  await sleep(delay); // Exponential backoff
}
if (attempts > 10) {
  requireCaptcha(req);
}

Cas d'usage : Protéger les formulaires de login et de reset de mot de passe contre les attaques automatisées.

Anti-pattern : Verrouiller le compte indéfiniment après N échecs, permettant un déni de service ciblé.
#security#authentication

CDN (Content Delivery Network)

Advanced Ecosystem 🟢 Junior

Réseau de serveurs géographiquement distribués qui cache et sert le contenu statique au plus près des utilisateurs. Réduit la latence et décharge le serveur d'origine.

Des boulangeries de quartier qui stockent le pain cuit à la boulangerie centrale : plus besoin de traverser la ville.

// Next.js with CDN headers
export async function GET() {
  return new Response(data, {
    headers: {
      'Cache-Control': 'public, s-maxage=3600, stale-while-revalidate=86400',
    },
  });
}

Cas d'usage : Servir les assets statiques, images et API réponses cachées avec latence < 50ms mondiale.

Anti-pattern : Cacher du contenu dynamique personnalisé sur le CDN sans stratégie de cache-key appropriée.
#performance#infrastructure

Child Workflow

Advanced Ecosystem 🔴 Senior

Workflow lancé depuis un autre Workflow parent dans Temporal. Permet la décomposition de processus complexes et l'isolation des échecs.

Un manager qui délègue une sous-tâche à un employé tout en continuant son propre travail.

async function parentWorkflow(orders) {
  const handles = orders.map(order =>
    startChild(processOrderWorkflow, { args: [order] })
  );
  return Promise.all(handles.map(h => h.result()));
}

Cas d'usage : Traiter en parallèle plusieurs sous-processus indépendants tout en gardant un contrôle centralisé.

#orchestration#architecture

Choreography vs Orchestration

Advanced Ecosystem 🔴 Senior

Deux approches de coordination de services. Orchestration : un chef centralisé dirige (Temporal). Chorégraphie : chaque service réagit aux événements des autres (event-driven).

Orchestre symphonique (chef d'orchestre dirigeant chaque musicien) vs danse de salon (chaque danseur réagit aux mouvements du partenaire).

// Orchestration (centralized)
await paymentService.charge(order);
await inventoryService.reserve(order);
await shippingService.ship(order);
// Choreography (event-driven)
eventBus.emit('order.created', order);
// Each service listens and reacts independently

Cas d'usage : Choisir orchestration pour les workflows critiques avec compensation, chorégraphie pour le découplage maximal.

Anti-pattern : Mélanger les deux approches sans stratégie claire, créant un système ni centralisé ni décentralisé.
#architecture#distributed#microservices

Compression (gzip, Brotli)

Advanced Ecosystem 🟢 Junior

Algorithmes de compression HTTP réduisant la taille des transferts. Brotli offre 15-20% de compression en plus que gzip et est supporté par tous les navigateurs modernes.

Aspirer l'air d'un sac sous vide avant de l'envoyer par la poste pour réduire les frais de port.

// Express with compression
import compression from 'compression';
app.use(compression({ level: 6 }));
// Nginx config
gzip on;
brotli on;
brotli_types text/html application/javascript text/css;

Cas d'usage : Réduire de 60-80% la taille des transferts HTTP pour les fichiers texte (JS, CSS, HTML, JSON).

Anti-pattern : Compresser des fichiers déjà compressés (images, vidéos, archives) gaspillant du CPU pour zéro gain.
#performance#networking

Content Security Policy (CSP)

Advanced Ecosystem 🟡 Mid

En-tête HTTP qui restreint les sources autorisées pour les scripts, styles, images et autres ressources. Principale défense contre les attaques XSS.

Une liste blanche à l'entrée d'un club VIP : seules les sources approuvées peuvent entrer et s'exécuter.

// CSP Header
Content-Security-Policy:
  default-src 'self';
  script-src 'self' 'nonce-abc123';
  style-src 'self' 'unsafe-inline';
  img-src 'self' https://cdn.example.com;
  connect-src 'self' https://api.example.com;

Cas d'usage : Empêcher l'exécution de scripts malicieux injectés dans la page (XSS, injection de publicités).

Anti-pattern : Utiliser 'unsafe-inline' et 'unsafe-eval' dans script-src, annulant toute la protection CSP.
#security#web

Continue-as-New

Advanced Ecosystem 🔴 Senior

Mécanisme Temporal qui termine un Workflow et en démarre un nouveau avec un historique frais. Évite la croissance illimitée de l'historique d'événements.

Commencer un nouveau carnet quand l'ancien est plein, en notant juste le résumé de la dernière page.

async function pollingWorkflow(state) {
  for (let i = 0; i < 100; i++) {
    state = await pollExternal(state);
  }
  await continueAsNew(state);
}

Cas d'usage : Maintenir des Workflows de longue durée (polling, monitoring) sans dépasser la limite d'historique.

#orchestration#performance

Core Web Vitals (LCP, INP, CLS)

Advanced Ecosystem 🟡 Mid

Trois métriques Google mesurant l'expérience utilisateur : LCP (temps d'affichage du plus grand élément), INP (réactivité aux interactions), CLS (stabilité visuelle).

Les 3 notes d'un restaurant : rapidité du service (LCP), réactivité du serveur (INP), stabilité de la table (CLS).

// Measure with web-vitals library
import { onLCP, onINP, onCLS } from 'web-vitals';
onLCP(({ value }) => analytics.send('LCP', value));
onINP(({ value }) => analytics.send('INP', value));
onCLS(({ value }) => analytics.send('CLS', value));
// Good: LCP<2.5s, INP<200ms, CLS<0.1

Cas d'usage : Monitorer et optimiser l'UX mesurable pour améliorer le SEO et la satisfaction utilisateur.

Anti-pattern : Optimiser uniquement Lighthouse en lab sans mesurer les Core Web Vitals en conditions réelles (RUM).
#performance#seo#ux

CORS (Preflight)

Advanced Ecosystem 🟡 Mid

Mécanisme de sécurité navigateur qui bloque les requêtes cross-origin. Les requêtes non-simples déclenchent un preflight OPTIONS pour vérifier les permissions du serveur.

Avant de livrer un colis international, le douanier appelle le destinataire pour vérifier qu'il attend bien ce paquet.

import cors from 'cors';
app.use(cors({
  origin: 'https://myapp.com',
  methods: ['GET', 'POST', 'PUT', 'DELETE'],
  credentials: true,
  maxAge: 86400, // Cache preflight 24h
}));

Cas d'usage : Configurer une API backend pour accepter les requêtes du frontend déployé sur un autre domaine.

Anti-pattern : Mettre origin: '*' avec credentials: true, ce qui est interdit par les navigateurs et masque un problème de config.
#security#web#networking

Edge Computing

Advanced Ecosystem 🟡 Mid

Exécution de code côté serveur au plus près de l'utilisateur sur un réseau distribué de points de présence (PoP). Réduit la latence de 100-300ms à 10-50ms.

Des guichets de banque dans chaque quartier au lieu d'un seul siège en centre-ville.

// Cloudflare Worker
export default {
  async fetch(request) {
    const country = request.cf?.country;
    const cached = await caches.default.match(request);
    if (cached) return cached;
    const response = await fetch(request);
    return response;
  },
};

Cas d'usage : Personnalisation géographique, auth validation, A/B testing et cache API au plus près des utilisateurs.

Anti-pattern : Mettre de la logique avec état ou des requêtes DB distantes sur l'edge, annulant le gain de latence.
#performance#infrastructure#architecture

Elasticsearch

Advanced Ecosystem 🟡 Mid

Moteur de recherche distribué basé sur Lucene, optimisé pour la recherche full-text, l'analyse de logs et l'agrégation de données à grande échelle.

Un bibliothécaire surpuissant qui retrouve n'importe quel livre en millisecondes parmi des millions.

const results = await client.search({
  index: 'products',
  body: {
    query: { multi_match: {
      query: 'chaussure running',
      fields: ['name^3', 'description'],
      fuzziness: 'AUTO'
    }}
  }
});

Cas d'usage : Recherche produit e-commerce, analyse de logs (ELK stack), moteur de suggestions.

Anti-pattern : Utiliser Elasticsearch comme base de données primaire au lieu d'un complément de recherche.
#search#performance#backend

Email Templates (MJML / React Email)

Advanced Ecosystem 🟡 Mid

Frameworks pour créer des emails HTML responsives. MJML utilise un langage de balisage dédié, React Email utilise des composants React transpilés en HTML compatible email.

Un moule à gâteau pour emails : vous choisissez la forme, le contenu s'adapte automatiquement à tous les fours (clients email).

// React Email component
import { Html, Button, Text } from '@react-email/components';
export function WelcomeEmail({ name, url }) {
  return (
    <Html>
      <Text>Bienvenue {name} !</Text>
      <Button href={url}>Confirmer</Button>
    </Html>
  );
}

Cas d'usage : Créer des emails professionnels responsives compatibles Outlook, Gmail et Apple Mail.

Anti-pattern : Coder des emails en HTML/CSS classique, obtenant un rendu cassé sur la moitié des clients email.
#communication#frontend

FCP (First Contentful Paint)

Advanced Ecosystem 🟡 Mid

Moment où le navigateur affiche le premier contenu visible (texte, image, SVG). Indique quand l'utilisateur perçoit que la page commence à charger.

Le moment où la première image apparaît quand on allume une vieille télévision à tube.

// Performance Observer for FCP
new PerformanceObserver((entries) => {
  const fcp = entries.getEntriesByName('first-contentful-paint')[0];
  console.log(`FCP: ${fcp.startTime}ms`); // Target: < 1.8s
}).observe({ type: 'paint', buffered: true });

Cas d'usage : Mesurer le temps de perception initial et identifier les blocages de rendu (CSS/JS bloquants).

#performance#frontend

Finite State Machine

Advanced Ecosystem 🟡 Mid

Modèle mathématique avec un nombre fini d'états, de transitions entre ces états et d'événements déclencheurs. Le système ne peut être que dans un seul état à la fois.

Un feu tricolore : vert, orange ou rouge, jamais deux à la fois, et les transitions suivent un ordre strict.

// Simple FSM
const transitions = {
  green:  { TIMER: 'yellow' },
  yellow: { TIMER: 'red' },
  red:    { TIMER: 'green' },
};
function next(state, event) {
  return transitions[state]?.[event] ?? state;
}

Cas d'usage : Modéliser tout processus séquentiel avec des règles de transition strictes (UI, protocoles, workflows).

#architecture#computer-science

Font Optimization

Advanced Ecosystem 🟡 Mid

Techniques d'optimisation des polices web : subsetting (garder seulement les caractères utilisés), font-display:swap, preload et formats modernes (woff2).

Ne mettre dans sa valise que les vêtements qu'on va porter au lieu d'emporter toute la garde-robe.

@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter-latin.woff2') format('woff2');
  font-display: swap;
  unicode-range: U+0000-00FF; /* Latin subset only */
}
/* Preload in HTML */
/* <link rel="preload" href="/fonts/inter-latin.woff2" as="font"> */

Cas d'usage : Réduire le FOUT/FOIT et le poids des polices pour améliorer le LCP et le CLS.

Anti-pattern : Charger Google Fonts en bloquant le rendu ou importer toutes les graisses d'une police.
#performance#frontend

Helmet.js

Advanced Ecosystem 🟢 Junior

Middleware Express qui configure automatiquement une dizaine d'en-têtes de sécurité HTTP (CSP, HSTS, X-Frame-Options, etc.) avec des valeurs saines par défaut.

Un casque de protection tout-en-un qui protège la tête sous tous les angles sans effort.

import helmet from 'helmet';
app.use(helmet({
  contentSecurityPolicy: {
    directives: {
      defaultSrc: ["'self'"],
      scriptSrc: ["'self'", "'nonce-abc'"],
    },
  },
}));

Cas d'usage : Appliquer les bonnes pratiques de sécurité HTTP en une seule ligne sur toute app Express.

Anti-pattern : Désactiver tous les modules Helmet pour résoudre un bug au lieu de configurer finement.
#security#tool#web

HTTP/2

Advanced Ecosystem 🟡 Mid

Version majeure du protocole HTTP avec multiplexage (plusieurs requêtes sur une connexion), compression des headers (HPACK) et server push. Élimine le besoin de concaténation.

Une autoroute à plusieurs voies au lieu d'une route à voie unique avec feu de circulation.

// Nginx HTTP/2 config
server {
  listen 443 ssl http2;
  ssl_certificate /path/to/cert.pem;
  ssl_certificate_key /path/to/key.pem;
}
// Node.js
import http2 from 'node:http2';
const server = http2.createSecureServer({ cert, key });

Cas d'usage : Améliorer la performance de chargement en parallélisant les requêtes sans overhead de connexion.

Anti-pattern : Continuer à bundler tous les JS en un seul fichier sous HTTP/2, perdant l'avantage du cache granulaire.
#performance#networking

HTTP/3 QUIC

Advanced Ecosystem 🔴 Senior

Dernière version du protocole HTTP basée sur QUIC (UDP) au lieu de TCP. Élimine le head-of-line blocking, offre des handshakes 0-RTT et une meilleure performance mobile.

Passer de la route (TCP) à l'avion (QUIC) : plus de bouchons, connexion plus rapide et changement de réseau fluide.

// Nginx HTTP/3 (experimental)
server {
  listen 443 quic reuseport;
  listen 443 ssl;
  http3 on;
  add_header Alt-Svc 'h3=":443"; ma=86400';
}

Cas d'usage : Améliorer la latence sur les connexions mobiles instables et les réseaux à forte perte de paquets.

#performance#networking

HTTPS / TLS

Advanced Ecosystem 🟢 Junior

Protocole de chiffrement des communications web utilisant TLS. Garantit la confidentialité, l'intégrité et l'authenticité des échanges entre client et serveur.

Une enveloppe scellée et signée : personne ne peut lire le contenu ni le modifier en chemin.

// Force HTTPS redirect (Express)
app.use((req, res, next) => {
  if (req.header('x-forwarded-proto') !== 'https') {
    return res.redirect(301, `https://${req.hostname}${req.url}`);
  }
  next();
});

Cas d'usage : Obligatoire pour toute application en production, requis pour les cookies Secure et HTTP/2.

Anti-pattern : Accepter du contenu mixte HTTP/HTTPS ou désactiver la vérification des certificats en production.
#security#networking

Image Optimization (WebP, AVIF)

Advanced Ecosystem 🟡 Mid

Conversion des images vers des formats modernes (WebP, AVIF) avec redimensionnement responsive. AVIF offre 50% de compression en plus que JPEG à qualité égale.

Compresser une valise avec des sacs sous vide : même contenu, moitié de place.

import sharp from 'sharp';
await sharp(inputBuffer)
  .resize(800, 600, { fit: 'inside' })
  .avif({ quality: 60 })
  .toFile('output.avif');
// Fallback chain: AVIF > WebP > JPEG

Cas d'usage : Réduire le poids des images de 60-80% pour améliorer le LCP et la bande passante.

Anti-pattern : Servir des images PNG/JPEG non compressées en taille originale sur mobile.
#performance#media

In-app Notifications

Advanced Ecosystem 🟡 Mid

Système de notifications intégré à l'application (cloche, badge, toasts) avec centre de notifications persistant. Utilise souvent WebSocket ou SSE pour le temps réel.

La boîte de réception interne d'un bureau avec un voyant lumineux qui s'allume quand un nouveau message arrive.

// Notification center pattern
const [notifications, setNotifications] = useState([]);
useEffect(() => {
  const es = new EventSource('/api/notifications/stream');
  es.onmessage = (e) => {
    setNotifications(prev => [JSON.parse(e.data), ...prev]);
  };
  return () => es.close();
}, []);

Cas d'usage : Informer l'utilisateur d'événements (mentions, mises à jour, tâches) sans quitter l'application.

#communication#ux

Internal Packages

Advanced Ecosystem 🟡 Mid

Packages partagés au sein d'un monorepo sans publication sur NPM. Référencés via le protocole workspace, ils permettent le partage de code typé entre applications.

Des recettes maison partagées entre restaurants du même groupe, jamais publiées dans un livre de cuisine.

// packages/ui/package.json
{ "name": "@myorg/ui", "main": "./src/index.ts" }
// apps/web/package.json
{ "dependencies": { "@myorg/ui": "workspace:*" } }
// Usage
import { Button } from '@myorg/ui';

Cas d'usage : Partager des composants UI, utils ou types entre le frontend et le backend d'un monorepo.

Anti-pattern : Publier sur NPM des packages utilisés uniquement en interne, ajoutant de la complexité inutile.
#monorepo#architecture

Inverted Index

Advanced Ecosystem 🟡 Mid

Structure de données qui associe chaque terme à la liste des documents le contenant. Fondement de tous les moteurs de recherche full-text pour des requêtes en O(1).

L'index alphabétique à la fin d'un livre : au lieu de lire tout le livre, on cherche le mot et on trouve les pages.

// Simplified inverted index
const index = {
  'javascript': [docId1, docId3, docId7],
  'react':      [docId1, docId2],
  'node':       [docId3, docId5, docId7],
};

Cas d'usage : Comprendre le fonctionnement interne d'Elasticsearch, Meilisearch et des moteurs de recherche.

#search#data-structure

JWT (JSON Web Token)

Advanced Ecosystem 🟡 Mid

Token auto-contenu composé de 3 parties (header, payload, signature) encodé en Base64. Permet l'authentification stateless sans interroger la base de données à chaque requête.

Un badge visiteur avec photo, nom et tampon de sécurité : toutes les infos sont sur le badge, pas besoin de vérifier un registre.

import jwt from 'jsonwebtoken';
const accessToken = jwt.sign(
  { userId: user.id, role: 'admin' },
  process.env.JWT_SECRET,
  { expiresIn: '15m' }
);

Cas d'usage : Authentification API stateless avec access token court (15min) et refresh token long (7j).

Anti-pattern : Stocker des données sensibles dans le payload JWT (il est seulement encodé, pas chiffré) ou utiliser un secret faible.
#security#authentication

JWT Token Rotation

Advanced Ecosystem 🔴 Senior

Stratégie où le refresh token est à usage unique : chaque utilisation génère une nouvelle paire access/refresh. Détecte le vol de token par réutilisation.

Un ticket de vestiaire à usage unique : si quelqu'un l'a déjà utilisé, le vestiaire sait qu'il y a fraude.

async function rotateTokens(refreshToken) {
  const stored = await db.findToken(refreshToken);
  if (stored.used) {
    await db.revokeFamily(stored.familyId); // Compromis!
    throw new Error('Token reuse detected');
  }
  await db.markUsed(refreshToken);
  return generateTokenPair(stored.userId, stored.familyId);
}

Cas d'usage : Sécuriser les sessions longue durée en détectant automatiquement le vol de refresh token.

Anti-pattern : Utiliser des refresh tokens réutilisables sans détection de réutilisation.
#security#authentication

Lerna

Advanced Ecosystem 🟡 Mid

Outil historique de gestion de monorepos JS pour le versioning et la publication de packages NPM. Désormais maintenu par Nx avec cache et graphe de tâches intégrés.

Un éditeur de livres qui gère les versions et la publication coordonnée de toute une collection.

// lerna.json
{
  "version": "independent",
  "npmClient": "pnpm",
  "command": {
    "publish": { "conventionalCommits": true }
  }
}

Cas d'usage : Publier et versionner des packages NPM interdépendants depuis un monorepo avec changelog automatique.

Anti-pattern : Utiliser Lerna seul sans Nx ou Turborepo pour le caching, subissant des builds lents.
#tooling#monorepo#npm

Lighthouse

Advanced Ecosystem 🟢 Junior

Outil Google d'audit automatisé mesurant performance, accessibilité, SEO et bonnes pratiques d'une page web. Disponible dans Chrome DevTools et en CI.

Un contrôle technique automobile qui inspecte tous les aspects de votre véhicule et donne une note.

// Lighthouse CI
npx lhci autorun --collect.url=https://myapp.com
// lighthouse.config.js
{ ci: { assert: {
  assertions: {
    'categories:performance': ['error', { minScore: 0.9 }],
    'categories:accessibility': ['warn', { minScore: 0.95 }],
  }
}}}

Cas d'usage : Auditer automatiquement les pages en CI pour détecter les régressions de performance et accessibilité.

Anti-pattern : Se fier uniquement au score Lighthouse local sans tester en conditions réseau réelles.
#performance#tooling

Long Polling

Advanced Ecosystem 🟢 Junior

Technique où le client envoie une requête HTTP et le serveur la garde ouverte jusqu'à avoir de nouvelles données. Simule du temps réel sans WebSocket.

Appeler un restaurant pour demander si une table est libre et rester en ligne jusqu'à ce qu'une se libère.

async function longPoll() {
  const res = await fetch('/api/updates?timeout=30000');
  const data = await res.json();
  processUpdate(data);
  longPoll(); // Immediately reconnect
}

Cas d'usage : Fallback temps réel quand WebSocket ou SSE ne sont pas disponibles (firewalls, proxies).

Anti-pattern : Faire du polling court (toutes les 100ms) au lieu du long polling, gaspillant bande passante et CPU.
#real-time#networking

Meilisearch

Advanced Ecosystem 🟢 Junior

Moteur de recherche open-source ultra-rapide et simple à configurer. Alternative à Algolia avec typo-tolerance, filtres et tri, déployable on-premise.

Un Algolia gratuit que vous pouvez héberger chez vous, aussi rapide mais sans la facture SaaS.

import { MeiliSearch } from 'meilisearch';
const client = new MeiliSearch({ host: 'http://localhost:7700' });
await client.index('movies').addDocuments(movies);
const results = await client.index('movies').search('avenger', {
  filter: ['year > 2015'],
});

Cas d'usage : Recherche instantanée sur un projet avec contraintes budget/données sensibles nécessitant du self-hosted.

#search#open-source

Mercure Protocol

Advanced Ecosystem 🟡 Mid

Protocole de push temps réel basé sur SSE avec un hub central. Le serveur publie des updates vers le hub qui les distribue aux clients abonnés via SSE.

Un bureau de poste central qui reçoit les lettres des expéditeurs et les distribue aux boîtes aux lettres des abonnés.

// Publish from server
await fetch('https://hub.example.com/.well-known/mercure', {
  method: 'POST',
  headers: { Authorization: `Bearer ${jwt}` },
  body: new URLSearchParams({
    topic: '/orders/42', data: JSON.stringify(order)
  }),
});

Cas d'usage : Push temps réel dans un écosystème Symfony/API Platform sans gérer l'infrastructure WebSocket.

#real-time#protocol

Multipart Upload

Advanced Ecosystem 🟡 Mid

Technique de découpage d'un fichier volumineux en plusieurs parties uploadées en parallèle. Permet la reprise en cas d'erreur et optimise le débit réseau.

Déménager en envoyant les cartons par plusieurs camions en parallèle plutôt qu'un seul gros camion.

const upload = new Upload({
  client: s3,
  params: {
    Bucket: 'videos', Key: 'movie.mp4', Body: fileStream,
  },
  partSize: 10 * 1024 * 1024, // 10MB parts
  leavePartsOnError: false,
});
await upload.done();

Cas d'usage : Upload de fichiers volumineux (vidéos, datasets) avec barre de progression et reprise sur erreur.

#storage#performance

Nx

Advanced Ecosystem 🟡 Mid

Framework de monorepo avec graphe de dépendances intelligent, cache distribué et générateurs de code. Supporte React, Angular, Node et plus avec des plugins dédiés.

Un architecte de chantier qui connaît toutes les dépendances entre bâtiments et ne rénove que ce qui est impacté.

// nx.json - affected commands
npx nx affected --target=test // Only test changed
npx nx affected --target=build // Only build changed
npx nx graph // Visualize dependency graph

Cas d'usage : Gérer un monorepo d'entreprise multi-frameworks avec des dizaines de projets interdépendants.

Anti-pattern : Utiliser Nx sans configurer le cache distribué en CI, perdant le principal avantage de performance.
#tooling#monorepo

OAuth2

Advanced Ecosystem 🟡 Mid

Protocole d'autorisation déléguée permettant à une app d'accéder aux ressources d'un utilisateur sans connaître son mot de passe. Définit plusieurs flows selon le contexte.

Donner un passe limité au plombier pour accéder à la salle de bain sans lui donner les clés de toute la maison.

// Authorization Code flow (redirect)
const authUrl = `https://auth.example.com/authorize
  ?response_type=code
  &client_id=${CLIENT_ID}
  &redirect_uri=${REDIRECT}
  &scope=read:profile
  &state=${csrfToken}`;

Cas d'usage : Permettre le 'Login with Google/GitHub' ou accéder aux APIs tierces au nom de l'utilisateur.

Anti-pattern : Utiliser le flow Implicit (déprécié) au lieu d'Authorization Code + PKCE pour les SPA.
#security#authentication

OAuth2 PKCE

Advanced Ecosystem 🟡 Mid

Extension OAuth2 (Proof Key for Code Exchange) qui protège le flow Authorization Code contre l'interception. Utilise un code_verifier et code_challenge.

Envoyer un cadenas ouvert avec la demande, puis prouver qu'on a la clé en l'ouvrant lors de l'échange.

const verifier = generateRandomString(128);
const challenge = base64url(sha256(verifier));
// Step 1: Send challenge
`&code_challenge=${challenge}&code_challenge_method=S256`
// Step 2: Send verifier to get token
`&code_verifier=${verifier}`

Cas d'usage : Sécuriser le flow OAuth2 dans les SPA et apps mobiles qui ne peuvent pas garder un client_secret.

Anti-pattern : Utiliser le flow Implicit ou Authorization Code sans PKCE dans une application publique (SPA, mobile).
#security#authentication

OpenID Connect

Advanced Ecosystem 🟡 Mid

Couche d'identité construite sur OAuth2 qui ajoute l'authentification. Retourne un ID Token (JWT) contenant les informations de l'utilisateur en plus de l'access token.

OAuth2 dit 'cette personne a le droit d'entrer', OpenID Connect ajoute 'et voici sa carte d'identité'.

// ID Token decoded payload
{
  "sub": "user-123",
  "name": "Alice Martin",
  "email": "alice@example.com",
  "iss": "https://auth.example.com",
  "aud": "my-app-client-id",
  "exp": 1700000000
}

Cas d'usage : Implémenter un SSO (Single Sign-On) d'entreprise avec identification fiable de l'utilisateur.

#security#authentication#identity

OWASP Top 10

Advanced Ecosystem 🟡 Mid

Classification des 10 risques de sécurité web les plus critiques, mise à jour régulièrement. Inclut injection, broken auth, XSS, SSRF, etc.

Le top 10 des erreurs les plus courantes au code de la route : les connaître évite 90% des accidents.

// A03:2021 Injection - Prevention
const user = await db.query(
  'SELECT * FROM users WHERE id = $1', // Parameterized
  [userId] // Never concatenate!
);

Cas d'usage : Checklist de sécurité obligatoire lors de l'audit ou de la revue de code d'une application web.

Anti-pattern : Construire des requêtes SQL par concaténation de chaînes avec des entrées utilisateur.
#security#best-practice

Passkeys / WebAuthn

Advanced Ecosystem 🔴 Senior

Standard d'authentification sans mot de passe utilisant la cryptographie asymétrique. La clé privée reste sur l'appareil de l'utilisateur, seule la clé publique est stockée côté serveur.

Un verrou qui ne reconnaît que votre empreinte digitale : impossible à copier, rien à retenir.

const credential = await navigator.credentials.create({
  publicKey: {
    challenge: serverChallenge,
    rp: { name: 'MyApp' },
    user: { id: userId, name: email, displayName: name },
    pubKeyCredParams: [{ alg: -7, type: 'public-key' }],
  }
});

Cas d'usage : Remplacer les mots de passe par une authentification résistante au phishing sur mobile et desktop.

Anti-pattern : Ne pas proposer de méthode de récupération quand l'utilisateur perd son appareil avec les passkeys.
#security#authentication

Performance Budget

Advanced Ecosystem 🟡 Mid

Limites maximales définies pour les métriques de performance (taille JS < 200KB, LCP < 2.5s). Bloque le build ou alerte quand les budgets sont dépassés.

Un budget financier pour les courses : si vous dépassez, vous devez retirer un article avant de passer en caisse.

// bundlesize config or CI check
{
  "budgets": [
    { "path": "dist/*.js", "maxSize": "200kB" },
    { "path": "dist/*.css", "maxSize": "50kB" },
    { "metric": "LCP", "max": 2500 }
  ]
}

Cas d'usage : Empêcher la régression de performance en intégrant des garde-fous dans le pipeline CI/CD.

Anti-pattern : Définir des budgets sans les enforcer automatiquement en CI, les rendant purement décoratifs.
#performance#ci-cd

pnpm Workspaces

Advanced Ecosystem 🟡 Mid

Fonctionnalité native de pnpm pour gérer un monorepo avec symlinks et content-addressable store. Économise l'espace disque en partageant les dépendances identiques.

Une bibliothèque partagée où chaque bureau a un raccourci vers le livre au lieu d'une copie complète.

# pnpm-workspace.yaml
packages:
  - 'apps/*'
  - 'packages/*'
# Using workspace protocol
{ "dependencies": { "@myorg/ui": "workspace:*" } }

Cas d'usage : Structurer un monorepo avec gestion efficace des dépendances partagées et résolution rapide.

Anti-pattern : Utiliser npm/yarn classique dans un monorepo avec duplication massive des node_modules.
#tooling#monorepo

Presigned URL

Advanced Ecosystem 🟡 Mid

URL temporaire signée cryptographiquement qui donne un accès limité dans le temps à un objet S3. Permet l'upload/download direct sans exposer les credentials.

Un ticket de vestiaire avec date d'expiration : il donne accès à un seul casier pendant un temps limité.

import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
const url = await getSignedUrl(s3, new PutObjectCommand({
  Bucket: 'uploads',
  Key: `docs/${fileId}`,
  ContentType: 'application/pdf',
}), { expiresIn: 300 }); // 5 min

Cas d'usage : Permettre l'upload direct du navigateur vers S3 sans passer par votre serveur backend.

Anti-pattern : Générer des presigned URLs avec une durée trop longue (jours) ou sans restriction de content-type.
#storage#security

Push Notifications

Advanced Ecosystem 🟡 Mid

Messages envoyés depuis un serveur vers l'appareil de l'utilisateur via APNs (Apple) ou FCM (Google), même quand l'application est fermée. Requiert un Service Worker sur le web.

Un facteur qui sonne à votre porte pour livrer un message urgent, même si vous n'attendiez rien.

// Web Push API
const subscription = await registration.pushManager.subscribe({
  userVisibleOnly: true,
  applicationServerKey: VAPID_PUBLIC_KEY,
});
// Server-side
await webpush.sendNotification(subscription, JSON.stringify({
  title: 'New message', body: 'Alice sent you a photo',
}));

Cas d'usage : Réengager les utilisateurs avec des alertes pertinentes (messages, commandes, promotions ciblées).

Anti-pattern : Demander la permission de notification dès le chargement de la page, avant toute interaction.
#communication#engagement

Rate Limiting

Advanced Ecosystem 🟡 Mid

Mécanisme qui limite le nombre de requêtes qu'un client peut faire dans une fenêtre de temps. Protège contre les abus, DDoS et scraping.

Un distributeur de tickets qui ne donne qu'un ticket par minute par personne pour éviter la bousculade.

import rateLimit from 'express-rate-limit';
app.use('/api/', rateLimit({
  windowMs: 15 * 60 * 1000, // 15 min
  max: 100, // 100 requests per window
  standardHeaders: true,
  message: 'Too many requests',
}));

Cas d'usage : Protéger les endpoints d'authentification et les API publiques contre les abus automatisés.

Anti-pattern : Rate limiter uniquement par IP sans tenir compte des utilisateurs authentifiés derrière un proxy.
#security#performance

Resource Hints

Advanced Ecosystem 🟡 Mid

Directives HTML (preload, prefetch, preconnect, dns-prefetch) qui informent le navigateur des ressources à charger en priorité ou à préparer en avance.

Commander l'entrée et le plat en même temps au restaurant pour que le plat arrive plus vite après l'entrée.

<!-- Critical resource -->
<link rel="preload" href="/fonts/inter.woff2" as="font" crossorigin>
<!-- Next page -->
<link rel="prefetch" href="/dashboard">
<!-- Third-party -->
<link rel="preconnect" href="https://api.example.com">
<link rel="dns-prefetch" href="https://cdn.example.com">

Cas d'usage : Accélérer le chargement des fonts critiques, des pages suivantes probables et des APIs tierces.

Anti-pattern : Preloader trop de ressources, saturant la bande passante et retardant les ressources critiques.
#performance#frontend

Retry Policy

Advanced Ecosystem 🟡 Mid

Configuration qui définit comment Temporal retente une Activity en échec : intervalle initial, backoff, nombre max de tentatives et erreurs non-retentables.

Rappeler un ami qui ne répond pas : d'abord après 1 min, puis 5 min, puis 30 min, avec un maximum de 5 essais.

const retryPolicy = {
  initialInterval: '1s',
  backoffCoefficient: 2,
  maximumAttempts: 5,
  nonRetryableErrorTypes: ['InvalidInputError'],
};

Cas d'usage : Configurer des retries intelligents sur les appels API externes pour absorber les erreurs transitoires.

Anti-pattern : Retry infini sans backoff exponentiel, causant un effet thundering herd sur le service cible.
#reliability#resilience

S3-compatible Storage

Advanced Ecosystem 🟡 Mid

Stockage objet accessible via l'API S3 d'Amazon, devenu un standard. Compatible avec MinIO, Cloudflare R2, DigitalOcean Spaces pour éviter le vendor lock-in.

Un entrepôt de stockage standardisé : les cartons (fichiers) se rangent de la même façon quel que soit l'entrepôt.

import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
const s3 = new S3Client({ region: 'eu-west-1' });
await s3.send(new PutObjectCommand({
  Bucket: 'my-uploads',
  Key: `avatars/${userId}.webp`,
  Body: fileBuffer,
}));

Cas d'usage : Stocker les fichiers uploadés (images, documents, vidéos) hors du serveur applicatif.

Anti-pattern : Stocker les fichiers uploadés sur le filesystem du serveur applicatif, perdant scalabilité et résilience.
#storage#cloud

Saga Pattern avec Temporal

Advanced Ecosystem 🔴 Senior

Pattern de gestion de transactions distribuées où chaque étape a une action compensatoire. En cas d'échec, les compensations sont exécutées en ordre inverse.

Annuler une réservation de vacances : d'abord l'hôtel, puis le vol, puis la voiture, dans l'ordre inverse des réservations.

const compensations = [];
try {
  await chargeCard(order); compensations.push(() => refund(order));
  await reserveStock(order); compensations.push(() => releaseStock(order));
  await shipOrder(order);
} catch (err) {
  for (const comp of compensations.reverse()) await comp();
}

Cas d'usage : Gérer des transactions multi-services (paiement + stock + livraison) sans verrou distribué.

Anti-pattern : Oublier d'enregistrer les compensations ou les exécuter dans le mauvais ordre.
#architecture#reliability#distributed

SAML

Advanced Ecosystem 🔴 Senior

Standard XML d'authentification fédérée principalement utilisé en entreprise. L'Identity Provider émet des assertions XML signées pour authentifier l'utilisateur auprès du Service Provider.

Un passeport diplomatique émis par un pays (IdP) et reconnu à la frontière d'un autre (SP).

// SAML config (passport-saml)
{
  entryPoint: 'https://idp.corp.com/saml/sso',
  issuer: 'my-app',
  cert: idpCertificate,
  callbackUrl: 'https://app.com/auth/saml/callback',
}

Cas d'usage : Intégrer une app SaaS avec l'Active Directory ou le SSO d'une grande entreprise.

Anti-pattern : Choisir SAML pour une nouvelle app grand public alors qu'OpenID Connect est plus simple et moderne.
#security#authentication#enterprise

Secret Management

Advanced Ecosystem 🟡 Mid

Pratiques et outils (Vault, AWS Secrets Manager, doppler) pour stocker, distribuer et rotationner les secrets applicatifs hors du code source.

Un coffre-fort numérique centralisé dont seuls les employés autorisés connaissent la combinaison, changée régulièrement.

// Using AWS Secrets Manager
const secret = await secretsManager.getSecretValue({
  SecretId: 'prod/db/credentials'
}).promise();
const { username, password } = JSON.parse(secret.SecretString);

Cas d'usage : Centraliser et sécuriser tous les secrets (DB, API, clés) avec rotation automatique en production.

Anti-pattern : Mettre les secrets dans les variables d'environnement sans chiffrement ni contrôle d'accès.
#security#devops

Server-Sent Events (SSE)

Advanced Ecosystem 🟡 Mid

Protocole HTTP unidirectionnel serveur vers client pour le streaming d'événements. Plus simple que WebSocket quand la communication bidirectionnelle n'est pas nécessaire.

Une radio FM : le serveur diffuse et les clients écoutent, sans pouvoir répondre par le même canal.

// Server (Node.js)
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
setInterval(() => {
  res.write(`data: ${JSON.stringify(getUpdate())}\n\n`);
}, 1000);

Cas d'usage : Notifications serveur, flux d'actualités, suivi de progression d'un traitement long.

Anti-pattern : Utiliser SSE quand le client doit aussi envoyer fréquemment des données au serveur.
#real-time#networking

Session vs Token Auth

Advanced Ecosystem 🟡 Mid

Sessions stockent l'état côté serveur (cookie + store), tokens sont stateless (JWT côté client). Sessions offrent révocation facile, tokens offrent scalabilité horizontale.

Session = badge gardé au registre de l'accueil. Token = badge avec toutes les infos imprimées dessus.

// Session: server stores state
req.session.userId = user.id; // Stored in Redis
// Token: client stores state
const token = jwt.sign({ userId: user.id }, secret);
res.json({ accessToken: token });

Cas d'usage : Choisir sessions pour les apps monolithiques classiques, tokens pour les API/microservices.

Anti-pattern : Stocker des JWT dans localStorage (vulnérable XSS) au lieu de cookies httpOnly.
#security#authentication#architecture

Shared Config Packages

Advanced Ecosystem 🟡 Mid

Packages monorepo contenant les configurations partagées (ESLint, TSConfig, Prettier, Tailwind). Centralisent les standards du projet en un seul endroit.

Un cahier des charges commun à tous les chantiers d'un groupe de construction.

// packages/eslint-config/index.js
module.exports = {
  extends: ['next', 'prettier'],
  rules: { 'no-console': 'warn' },
};
// apps/web/.eslintrc.js
module.exports = { extends: ['@myorg/eslint-config'] };

Cas d'usage : Garantir une configuration homogène de linting, formatting et compilation dans tout le monorepo.

Anti-pattern : Dupliquer les fichiers de config dans chaque app du monorepo, créant des incohérences.
#monorepo#tooling#best-practice

Socket.io (Rooms & Namespaces)

Advanced Ecosystem 🟡 Mid

Bibliothèque temps réel au-dessus de WebSocket avec fallback automatique. Les Rooms groupent les clients, les Namespaces séparent les canaux logiques.

Un immeuble (namespace) avec des appartements (rooms) : chaque message va à la bonne pièce du bon étage.

const chat = io.of('/chat');
chat.on('connection', (socket) => {
  socket.join('room-42');
  chat.to('room-42').emit('message', {
    user: socket.id, text: 'Hello!'
  });
});

Cas d'usage : Construire un chat multi-salons avec reconnexion automatique et support des anciens navigateurs.

Anti-pattern : Broadcaster à tous les clients au lieu d'utiliser les rooms, surchargeant le réseau inutilement.
#real-time#networking

State Machine (XState)

Advanced Ecosystem 🟡 Mid

Bibliothèque JavaScript pour modéliser la logique applicative comme des machines à états finis. Garantit que seules les transitions valides sont possibles.

Un distributeur automatique qui ne peut être que dans un état à la fois : en attente, en paiement, en distribution.

import { createMachine } from 'xstate';
const orderMachine = createMachine({
  initial: 'pending',
  states: {
    pending: { on: { PAY: 'processing' } },
    processing: { on: { SUCCESS: 'shipped', FAIL: 'pending' } },
    shipped: { on: { DELIVER: 'delivered' } },
    delivered: { type: 'final' },
  },
});

Cas d'usage : Modéliser des workflows complexes (commande, formulaire multi-étapes, lecteur vidéo) sans bugs d'état.

Anti-pattern : Gérer des états complexes avec des booléens multiples (isLoading && !isError && isSubmitted).
#architecture#state-management

Statechart

Advanced Ecosystem 🔴 Senior

Extension des FSM avec états hiérarchiques (imbriqués), parallèles et historiques. Permet de modéliser des systèmes complexes tout en gardant la rigueur des FSM.

Un organigramme d'entreprise avec des départements (états parents) contenant des équipes (sous-états) travaillant en parallèle.

const machine = createMachine({
  type: 'parallel',
  states: {
    player: { initial: 'paused',
      states: { paused: {}, playing: {} } },
    volume: { initial: 'normal',
      states: { muted: {}, normal: {}, loud: {} } },
  },
});

Cas d'usage : Modéliser des interfaces complexes avec plusieurs sous-systèmes indépendants (lecteur média, formulaires).

#architecture#state-management

Streaming HLS/DASH

Advanced Ecosystem 🔴 Senior

Protocoles de streaming adaptatif qui découpent la vidéo en segments et ajustent la qualité selon la bande passante. HLS (Apple) et DASH (standard ouvert) dominent le marché.

Un robinet qui ajuste automatiquement le débit d'eau selon la pression disponible dans les tuyaux.

// Video.js HLS player
import Hls from 'hls.js';
const hls = new Hls();
hls.loadSource('https://cdn.example.com/video/master.m3u8');
hls.attachMedia(videoElement);
hls.on(Hls.Events.MANIFEST_PARSED, () => {
  videoElement.play();
});

Cas d'usage : Diffuser du contenu vidéo à grande échelle avec adaptation automatique à la qualité réseau.

Anti-pattern : Servir des fichiers vidéo MP4 complets au lieu de streams adaptatifs, causant buffering sur connexions lentes.
#media#streaming

Temporal Activity

Advanced Ecosystem 🔴 Senior

Unité de travail exécutée par un Worker Temporal, représentant une action avec effets de bord (appel API, écriture DB). Les Activities peuvent être retentées indépendamment.

Les étapes individuelles d'une recette de cuisine : chacune peut être refaite sans recommencer tout le plat.

// Activity definition
async function sendEmail(to, subject, body) {
  const result = await mailer.send({ to, subject, body });
  return result.messageId;
}
// Registered in worker
const activities = { sendEmail, chargeCard };

Cas d'usage : Encapsuler chaque appel externe (paiement, email, API tierce) pour bénéficier du retry automatique.

Anti-pattern : Placer la logique d'Activity directement dans le Workflow, perdant ainsi la capacité de retry granulaire.
#orchestration#reliability

Temporal Query

Advanced Ecosystem 🔴 Senior

Mécanisme synchrone pour lire l'état interne d'un Workflow en cours sans le modifier. Retourne une valeur immédiatement.

Regarder par la vitre d'un four pour vérifier la cuisson sans ouvrir la porte.

const statusQuery = defineQuery('getStatus');
setHandler(statusQuery, () => ({
  step: currentStep,
  progress: completedSteps / totalSteps,
}));

Cas d'usage : Exposer la progression d'un processus long dans une UI sans interférer avec l'exécution.

#orchestration#observability

Temporal Schedule

Advanced Ecosystem 🟡 Mid

Planification native de Temporal pour lancer des Workflows à intervalles réguliers (cron-like). Gère les chevauchements, les pauses et les rattrappages.

Un réveil programmable qui sonne chaque jour à la même heure, même si vous dormez encore quand il sonne.

await client.schedule.create({
  scheduleId: 'daily-report',
  spec: { cronExpressions: ['0 8 * * *'] },
  action: {
    type: 'startWorkflow',
    workflowType: 'generateReport',
  },
});

Cas d'usage : Remplacer les cron jobs fragiles par des schedules durables avec retry et monitoring intégrés.

#orchestration#scheduling

Temporal Signal

Advanced Ecosystem 🔴 Senior

Mécanisme pour envoyer des données à un Workflow en cours d'exécution depuis l'extérieur. Le Signal est asynchrone et modifie l'état interne du Workflow.

Glisser un post-it sous la porte d'un collègue occupé pour lui transmettre une info sans l'interrompre.

// Define signal
const approveSignal = defineSignal('approve');
// Handle in workflow
setHandler(approveSignal, (data) => {
  approved = true;
  approver = data.userId;
});

Cas d'usage : Permettre une approbation humaine ou un événement externe d'influencer un Workflow en cours.

#orchestration#async

Temporal Timer

Advanced Ecosystem 🔴 Senior

Pause durable dans un Workflow Temporal qui survit aux redémarrages du Worker. Peut durer de secondes à des mois sans consommer de ressources.

Un minuteur de cuisine qui continue de tourner même si vous quittez la maison et revenez.

import { sleep } from '@temporalio/workflow';
// Wait 7 days for payment
await sleep('7 days');
if (!paymentReceived) {
  await cancelOrder(orderId);
}

Cas d'usage : Implémenter des délais métier (période d'essai, rappels, expiration) de manière fiable.

#orchestration#reliability

Temporal Visibility

Advanced Ecosystem 🔴 Senior

Système de recherche et filtrage des Workflows Temporal via des attributs personnalisés. Permet de lister et monitorer les exécutions en cours ou terminées.

Le tableau de bord d'un centre logistique montrant l'état de tous les colis en temps réel.

// Search workflows
const results = await client.workflow.list({
  query: `WorkflowType='OrderWorkflow'
    AND ExecutionStatus='Running'
    AND CustomField='vip'`,
});

Cas d'usage : Construire des dashboards opérationnels pour suivre les processus métier en production.

#observability#orchestration

Temporal Worker

Advanced Ecosystem 🔴 Senior

Processus qui écoute une Task Queue Temporal et exécute les Workflows et Activities assignés. Plusieurs Workers peuvent partager la même queue pour la scalabilité.

Un employé de bureau qui prend des dossiers dans une pile partagée et les traite un par un.

import { Worker } from '@temporalio/worker';
const worker = await Worker.create({
  workflowsPath: require.resolve('./workflows'),
  activities,
  taskQueue: 'order-queue',
});
await worker.run();

Cas d'usage : Déployer des Workers scalables horizontalement pour absorber les pics de charge sur les tâches asynchrones.

#orchestration#scalability

Temporal Workflow

Advanced Ecosystem 🔴 Senior

Fonction durable orchestrée par Temporal qui survit aux pannes et redémarrages. Le code s'exécute de manière déterministe et reprend automatiquement là où il s'est arrêté.

Un GPS qui recalcule automatiquement l'itinéraire après chaque détour, sans jamais oublier la destination finale.

// Temporal Workflow
async function orderWorkflow(order) {
  await validatePayment(order);
  await reserveStock(order);
  await shipOrder(order);
  await notifyCustomer(order);
  return { status: 'completed' };
}

Cas d'usage : Orchestrer des processus métier longs (commandes, onboarding) nécessitant fiabilité et traçabilité.

Anti-pattern : Mettre de la logique non-déterministe (Math.random, Date.now) directement dans le workflow au lieu d'utiliser les API Temporal.
#orchestration#reliability#backend

Transactional Email

Advanced Ecosystem 🟢 Junior

Email déclenché par une action utilisateur (confirmation, facture, reset password) via un service dédié (SendGrid, Resend, SES). Distinct de l'email marketing.

Le reçu que la caissière vous imprime automatiquement après chaque achat.

import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
await resend.emails.send({
  from: 'noreply@myapp.com',
  to: user.email,
  subject: 'Confirm your account',
  react: <ConfirmEmail url={confirmUrl} />,
});

Cas d'usage : Envoyer des emails de confirmation, reset password et factures avec un taux de délivrabilité élevé.

Anti-pattern : Envoyer les emails transactionnels via le même domaine/IP que les newsletters marketing.
#communication#backend

TTFB (Time to First Byte)

Advanced Ecosystem 🟡 Mid

Temps entre la requête HTTP et la réception du premier octet de réponse. Mesure la latence serveur incluant DNS, connexion TLS et traitement backend.

Le temps entre la commande au restaurant et le moment où le serveur commence à apporter le plat.

// Measure TTFB
const { responseStart, requestStart } = performance.getEntriesByType('navigation')[0];
const ttfb = responseStart - requestStart;
console.log(`TTFB: ${ttfb}ms`); // Target: < 800ms

Cas d'usage : Diagnostiquer les problèmes de latence serveur (DB lente, absence de cache, serveur éloigné).

Anti-pattern : Ignorer le TTFB élevé en pensant que le CDN suffit, alors que le problème est côté serveur.
#performance#backend

Turborepo

Advanced Ecosystem 🟡 Mid

Outil de build incrémental pour monorepos qui cache les résultats de build et n'exécute que les tâches affectées par les changements. Créé par Vercel.

Un chef cuisinier qui ne recuit que les plats dont les ingrédients ont changé, servant les autres depuis le frigo.

// turbo.json
{
  "pipeline": {
    "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] },
    "test": { "dependsOn": ["build"] },
    "lint": {},
    "dev": { "cache": false, "persistent": true }
  }
}

Cas d'usage : Accélérer les builds CI/CD d'un monorepo en ne rebuild que les packages modifiés.

Anti-pattern : Tout rebuilder à chaque commit sans exploiter le cache distant Turborepo.
#tooling#monorepo#performance

WebRTC

Advanced Ecosystem 🔴 Senior

API navigateur pour la communication peer-to-peer en temps réel (audio, vidéo, données) sans passer par un serveur central. Utilise STUN/TURN pour la traversée NAT.

Un talkie-walkie numérique qui connecte deux personnes directement sans passer par un standard téléphonique.

const pc = new RTCPeerConnection({ iceServers });
const stream = await navigator.mediaDevices.getUserMedia({
  video: true, audio: true
});
stream.getTracks().forEach(t => pc.addTrack(t, stream));
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);

Cas d'usage : Visioconférence, partage d'écran, transfert de fichiers P2P dans le navigateur.

Anti-pattern : Ignorer le serveur TURN de fallback, rendant la connexion impossible derrière certains NAT.
#real-time#p2p#media

WebSocket

Advanced Ecosystem 🟡 Mid

Protocole de communication bidirectionnelle persistante entre client et serveur sur une seule connexion TCP. Idéal pour les données temps réel.

Un appel téléphonique ouvert en continu plutôt que d'envoyer des SMS un par un.

const ws = new WebSocket('wss://api.example.com');
ws.onopen = () => ws.send(JSON.stringify({ type: 'subscribe', channel: 'prices' }));
ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  updateUI(data);
};

Cas d'usage : Chat en temps réel, cours de bourse, notifications live, jeux multijoueurs.

Anti-pattern : Utiliser WebSocket pour des requêtes simples request/response où HTTP suffirait.
#real-time#networking

Workflow Versioning

Advanced Ecosystem 🔴 Senior

Technique Temporal pour déployer de nouvelles versions de code Workflow sans casser les exécutions en cours. Utilise patching ou Task Queue versioning.

Changer le moteur d'un avion en vol : les anciens passagers gardent l'ancien moteur, les nouveaux ont le nouveau.

import { patched } from '@temporalio/workflow';
if (patched('new-validation')) {
  await newValidation(order);
} else {
  await oldValidation(order);
}

Cas d'usage : Déployer des changements de logique métier en production sans interrompre les processus en cours.

#orchestration#deployment

Autres stacks

Architecture CSS-in-JS DevOps HTML / CSS JavaScript MongoDB Mongoose NestJS Personalities PHP PostgreSQL React Sass Styled-Components Tailwind CSS Testing TypeScript WordPress
← Retour au lexique complet