Files
_Assistant_Lead_Tech/10_backend_patterns_valides.md
MaksTinyWorkshop 6265a2369d Update 25_01_26
2026-01-25 15:56:04 +01:00

9.1 KiB
Raw Blame History

Patterns back-end validés

Ce fichier contient uniquement des patterns back-end :

  • testés,
  • validés,
  • utilisés en conditions réelles.

Objectif : éviter de réinventer la roue et réduire le temps de debug.

Dernière mise à jour : 25-01-2026


Règle dor

Si ce nest pas confirmé comme fonctionnel et utile, ça na rien à faire ici.

  • Pas de “bonnes pratiques” vagues
  • Pas de dépendances implicites à une stack
  • Si cest spécifique à un framework / runtime / DB : on le note

Périmètre couvert

  • API (REST/GraphQL), services applicatifs
  • authn/authz
  • contrats (validation / schémas)
  • gestion derreurs
  • DB & migrations
  • observabilité
  • opérations sensibles (idempotence, retries)
  • intégrations (webhooks, jobs async)

Format standard dun pattern

Pattern :

  • Objectif : …
  • Contexte : …
  • Quand lutiliser : …
  • Quand léviter : …
  • Avantage : …
  • Limites / vigilance : …
  • Validé le : DD-MM-YYYY
  • Contexte technique : (obligatoire) ex. Node 20 / Postgres 16 ou Python 3.12 / FastAPI / Redis

Implémentation (exemple minimal)

(contenu)

Checklist (si pertinente)

  • Erreurs standardisées
  • Validation dentrée (schéma)
  • Observabilité minimale (requestId/traceId + logs)
  • Sécurité (authn/authz + secrets)
  • Tests au bon niveau
  • Idempotence si opération sensible

Pattern : Format derreur API standardisé

  • Objectif : fournir des erreurs prévisibles, exploitables et cohérentes pour tous les clients.
  • Contexte : API consommée par front-end, automatisations ou intégrations externes.
  • Quand lutiliser : dès quune API est exposée à autre chose quun usage interne trivial.
  • Quand léviter : jamais.
  • Avantage :
    • Debug plus rapide
    • UX maîtrisée côté client
    • Observabilité améliorée
  • Limites / vigilance :
    • Discipline requise pour éviter les formats ad hoc
  • Validé le : 25-01-2026
  • Contexte technique : API HTTP agnostique

Implémentation (exemple minimal)

{
  "error": {
    "code": "USER_NOT_FOUND",
    "message": "Utilisateur introuvable",
    "requestId": "abc-123"
  }
}

Checklist

  • Codes HTTP cohérents (4xx / 5xx)
  • Codes derreur applicatifs stables
  • Message utilisateur non technique
  • requestId présent

Pattern : Middleware de corrélation (requestId / traceId)

  • Objectif : relier chaque requête aux logs et erreurs associées.
  • Contexte : toute API ou service exposé.
  • Quand lutiliser : systématiquement en production.
  • Quand léviter : jamais.
  • Avantage :
    • MTTR réduit drastiquement
    • Debug cross-services possible
  • Limites / vigilance :
    • Doit être propagé partout (logs, erreurs, appels sortants)
  • Validé le : 25-01-2026
  • Contexte technique : Backend agnostique (HTTP)

Implémentation (exemple minimal)

- Générer un requestId à lentrée si absent
- Le propager dans le contexte de requête
- Linclure dans chaque log et réponse derreur

Checklist

  • requestId généré ou repris dun header existant
  • Présent dans tous les logs
  • Présent dans les erreurs retournées

Pattern : Idempotency key pour opérations sensibles

  • Objectif : empêcher les doublons lors de retries ou timeouts.
  • Contexte : création de ressources, paiements, webhooks.
  • Quand lutiliser : toute opération non strictement en lecture.
  • Quand léviter : endpoints purement GET.
  • Avantage :
    • Protection contre doublons
    • Robustesse face aux retries
  • Limites / vigilance :
    • Stockage et expiration des clés à gérer
  • Validé le : 25-01-2026
  • Contexte technique : API HTTP + DB transactionnelle

Implémentation (exemple minimal)

- Client fournit Idempotency-Key
- Backend stocke la clé + résultat
- Retry retourne le résultat initial

Checklist

  • Clé obligatoire sur endpoints sensibles
  • Contrainte dunicité côté DB
  • Comportement documenté

Pattern : Pagination robuste (cursor-based) pour les listings

  • Objectif : fournir des listings stables et performants sans incohérences entre pages.
  • Contexte : endpoints de liste (ex. /users, /orders) avec volume potentiellement important.
  • Quand lutiliser : dès quun listing peut dépasser quelques dizaines/centaines ditems ou subir des écritures concurrentes.
  • Quand léviter : listes strictement petites et statiques.
  • Avantage :
    • Résultats stables malgré insertions/suppressions
    • Meilleure performance que loffset sur gros volumes
    • Expérience client plus fiable
  • Limites / vigilance :
    • Nécessite un tri déterministe (champ + tie-breaker)
    • Complexité légèrement supérieure à offset/limit
  • Validé le : 25-01-2026
  • Contexte technique : API HTTP + DB (Postgres/MySQL), agnostique framework

Implémentation (exemple minimal)

- Trier par (createdAt DESC, id DESC) (exemple)
- Le client envoie cursor = dernier (createdAt,id) reçu
- Le backend renvoie nextCursor si plus de résultats
- Ne jamais exposer de cursor implicite ou non documenté

Checklist

  • Tri déterministe (avec tie-breaker)
  • nextCursor renvoyé et documenté
  • Limite max de page (protection)
  • Index DB aligné avec le tri

Pattern : Exécution asynchrone des tâches longues (queue + outbox light)

  • Objectif : sortir les opérations longues ou fragiles du chemin request/response.
  • Contexte : envoi demails, appels SaaS, génération de PDF, traitements batch, webhooks sortants.
  • Quand lutiliser : dès quune opération peut dépasser la latence acceptable ou dépendre dun service externe.
  • Quand léviter : opérations réellement instantanées et sans dépendances externes.
  • Avantage :
    • API plus rapide et plus fiable
    • Retries maîtrisés
    • Meilleure résilience aux pannes externes
  • Limites / vigilance :
    • Demande une discipline stricte sur lidempotence
    • Nécessite une stratégie minimale de dead-letter ou dalerting
  • Validé le : 25-01-2026
  • Contexte technique : Backend agnostique + DB transactionnelle + worker

Implémentation (exemple minimal)

- API écrit un job ou event en DB dans la transaction métier
- Worker lit les jobs en attente et exécute
- Retries avec backoff + compteur
- Statut FAILED ou dead-letter + alerte
- Idempotence par clé métier ou idempotency key

Checklist

  • Job créé dans une transaction (évite les pertes)
  • Retries et backoff définis
  • Dead-letter ou statut FAILED visible
  • Idempotence garantie
  • Logs corrélés (requestId/traceId)

Pattern : Soft delete et archivage explicite

  • Objectif : permettre la suppression logique sans perte immédiate de données.
  • Contexte : données métier critiques, besoins daudit, restauration ou conformité.
  • Quand lutiliser : dès quune suppression peut avoir des impacts métier ou légaux.
  • Quand léviter : données purement techniques ou réellement éphémères.
  • Avantage :
    • Restauration possible
    • Audit et traçabilité
    • Réduction des suppressions irréversibles
  • Limites / vigilance :
    • Complexité accrue sur les requêtes
    • Nécessite une discipline stricte (filtres par défaut)
  • Validé le : 25-01-2026
  • Contexte technique : API + DB relationnelle

Implémentation (exemple minimal)

- Champ deletedAt (nullable) ou status
- Les requêtes standards filtrent deletedAt IS NULL
- Endpoints dédiés pour restauration / purge
- Index DB tenant compte du soft delete

Checklist

  • Filtrage soft delete par défaut
  • Restauration explicite possible
  • Purge maîtrisée (cron / job)
  • Index DB adaptés
  • Tests sur cas supprimé / restauré

Pattern : Webhooks sortants robustes et idempotents

  • Objectif : garantir des intégrations fiables avec des systèmes externes.
  • Contexte : notifications, synchronisations, événements métier sortants.
  • Quand lutiliser : dès quun événement doit être transmis à un tiers.
  • Quand léviter : intégrations strictement synchrones et internes.
  • Avantage :
    • Tolérance aux pannes réseau
    • Retries maîtrisés
    • Observabilité des échecs
  • Limites / vigilance :
    • Gestion des retries et du volume
    • Nécessite une idempotence côté consommateur
  • Validé le : 25-01-2026
  • Contexte technique : Backend + HTTP + worker/queue

Implémentation (exemple minimal)

- Événement persisté (outbox) en DB
- Envoi asynchrone via worker
- Retries avec backoff
- Signature du payload (HMAC)
- Idempotency key dans le header

Checklist

  • Payload signé et vérifiable
  • Retries + backoff définis
  • Dead-letter ou statut FAILED visible
  • Idempotence documentée
  • Logs corrélés (requestId/traceId)

Index (à remplir au fil des validations)

  • Format derreur API standardisé
  • Middleware de corrélation (requestId / traceId)
  • Idempotency key pour opérations sensibles
  • Pagination robuste (cursor-based) pour les listings
  • Exécution asynchrone des tâches longues (queue + outbox light)
  • Soft delete et archivage explicite
  • Webhooks sortants robustes et idempotents

Notes importantes

  • On préfère 5 patterns solides à 50 “bons conseils”.
  • Un pattern = une idée actionnable + son cadre dutilisation.