Aller au contenu
Toute l'expérience

Alternance · Sensei

Socle API Pop

Une seule API pour toutes les applications du groupe

Logo Socle API Pop

Back-end FastAPI unifié qui sert les applications du groupe Pop, isole chaque produit par préfixe d'URL et par garde d'authentification, et fait le lien avec plusieurs instances Odoo.

La stack

API
Python 3.12 / FastAPI / Pydantic v2 / pydantic-settings / Uvicorn / Gunicorn / slowapi
Authentification
Supabase Auth / JWT ES256 via JWKS / PyJWT
ERP
Odoo 17 / JSON-RPC / Sessions Odoo / Proxy RPC sur liste blanche
Données
Supabase / PostgreSQL / Row Level Security / Migrations SQL
Services
Stripe / Alma / WeasyPrint / schwifty / Sentry
Exploitation
Docker / Workers multiples / Verrou de fichier pour les tâches de fond

Le produit

Chaque application du groupe avait commencé avec son propre intermédiaire vers l’ERP. Le socle les remplace par un seul service, avec un jeu de routes centralisé et une base d’authentification commune : une même personne peut être consultant dans une application et jury dans une autre.

Architecture

  • Une application FastAPI, des routeurs séparés strictement par préfixe (/certif, /network, /popcom, /mentor), chacun derrière sa propre chaîne de dépendances d’authentification
  • Une identité, plusieurs profils : un seul compte Supabase, mais une table de profil par application, et un rôle toujours résolu dans le périmètre du produit appelé pour empêcher qu’un droit déborde d’une application à l’autre
  • Deux clients Odoo : JSON-RPC sans état pour l’un, session Odoo renouvelée automatiquement pour les autres, avec appels aux contrôleurs des modules sur mesure
  • Un proxy RPC sur liste blanche pour les fronts qui lisent directement certains modèles de l’ERP
  • Des tâches de fond (synchronisations, relances, rappels) élues sur un seul worker par verrou de fichier, pour ne jamais envoyer un email en double quand le service tourne sur plusieurs workers

Ce que j’ai construit

  • Les routeurs des trois produits dont j’avais la charge et leurs gardes d’accès
  • La séparation identité / profil, mise au point avec un collègue quand le compte partagé a posé problème
  • Les synchronisations Odoo vers Supabase et les envois déclenchés par changement d’état