Zakaria Gafaoui Tech Lead IA & Architecte Solutions — du MVP à la production d’entreprise
Disponible Carte complète
FR EN
CV (FR) Ask my CV
Lentille
  • Identité1
  • Missions10
  • Deep-dive14
  • Compétence5
  • Produit2
  • Note3

Survolez un nœud pour révéler son second anneau. Cliquez pour recentrer la carte sur lui.

Deep-dive

Comment structurer un back Python et un front React qui tiennent dans la durée

Brouillon Alstom 1,5 j priorité P1

Contexte & contraintes

Le même besoin revient sur chaque projet et sur les deux produits : authentification, contrat d'API, streaming, découpage des dossiers. Le rejouer de zéro coûte deux semaines à chaque fois.

Les options envisagées

  • Contrat d'API rédigé côté front : rapide, mais le back suit toujours avec un train de retard
  • Schéma généré depuis le back, types dérivés côté front : une seule source de vérité

La décision

Le back publie le schéma, le front génère ses types

MotifUne rupture de contrat devient une erreur de compilation, pas un bug d'intégration détecté en recette.

Conséquence acceptéeUne étape de génération dans la CI.

L'implémentation

@router.post("/ask", response_model=None)
async def ask(q: Question, user: User = Depends(current_user)):
    ctx = await search(q.text, scope=user.scope)
    if not ctx:
        return no_source_response()
    return StreamingResponse(generate(q, ctx), media_type="text/event-stream")

Ce qui a cassé

Le streaming SSE derrière un load balancer mal configuré : la réponse arrivait d'un bloc et l'attente perçue doublait.

Le résultat

  • Un socle réutilisé d'un projet à l'autre, authentification et streaming inclus
  • Base commune d'AIHM et de Formea

Ce que je referais autrement

Poser la pagination et la gestion d'erreurs dans le contrat dès le départ, plutôt que projet par projet.

L'univers étendu