mojtaba/amini
Home/Articoli/.NET · Angular
May 2025·7 min di lettura·.NET · Angular

Come espongo modelli Python dietro un'API .NET consumata da Angular

Lo stack Dekali è .NET + Angular con modelli Python dietro le quinte. Ecco il cablaggio che tiene la latenza sotto i 200 ms nella lista ordini.

Un anti-pattern comune in prodotti ML-pesanti è esporre direttamente il modello Python al frontend. Il frontend finisce accoppiato a un linguaggio e un runtime che il team backend non possiede. Ogni retrain del modello diventa un rischio di deploy frontend. Il team che gira l'ERP .NET in Dekali non poteva permettersi quell'accoppiamento.

Il pattern in Dekali: i modelli Python vivono dentro un sidecar FastAPI, deployato accanto al monolite .NET nello stesso resource group Azure. L'API .NET espone il contratto pubblico tipizzato verso Angular. Dentro l'API .NET, un thin layer chiama FastAPI sulla rete interna del cluster e adatta la risposta al domain model .NET. Dal punto di vista del frontend, Python non esiste.

Tre dettagli rendono il tutto abbastanza veloce per la lista ordini (sub-200 ms).

Primo, cache delle predizioni. La cache key è hash(order_id, last_modified_at). Il layer .NET legge la cache, e chiama FastAPI solo in caso di miss o stale. Tempo medio sulla lista ordini: 480 ms → 90 ms il giorno del deploy.

Secondo, contract testing. Il confine .NET ↔ Python è la cucitura a più alto rischio: una breaking change silente nell'output del modello distrugge il deserializer .NET, che distrugge il dashboard Angular, senza errore di compilazione. Una test-suite asserisce, ad ogni deploy Python, che lo schema di ogni output matchi il DTO .NET. Schema drift è un CI failure, non un page alle 3 di notte.

Terzo, una sola facade .NET per business object. Esattamente un Controller per le predizioni AI legate all'ordine. Tutto passa di lì. Angular consuma un client tipizzato generato dall'OpenAPI .NET, senza dover sapere quali feature sono model-backed e quali pure SQL.

Due anni di pattern: zero deploy di modello che ha rotto il frontend, zero cambi frontend che richiedevano un retrain. Che è, in AI di produzione, la metrica di successo vera.