Supponiamo che tu disponga di un'app Web che utilizza i dati sia da un database che da un'API esterna e che per determinate funzionalità, è necessario chiamare entrambi per poter leggere / scrivere i dati necessari.
È meglio:
A) Per prima cosa avviare una transazione DB e quindi effettuare tutte le chiamate necessarie al DB PRIMA di chiamare l'API, quindi eseguire il rollback della transazione se la chiamata API non riesce.
o
B) Effettua prima la chiamata API e poi chiama il DB in caso di successo.
Pro e contro di ciascuna opzione, così come le vedo:
Il grande Pro con A è che l'integrità dei dati rimane intatta, indipendentemente da eventuali errori. Se le chiamate al DB falliscono prima che io raggiunga l'API, quindi ritorno prima di effettuare la chiamata, e se la chiamata API fallisce, posso ripristinare la mia transazione DB. Se tutto ha successo, allora commetto la transazione DB e procedo alla mia maniera allegra.
Il grande Con con A è che, a causa della transazione, il DB verrà bloccato per un periodo di tempo incontrollabile durante la chiamata dell'API esterna, che potrebbe influire sulle prestazioni.
I pro e i contro di B sono essenzialmente l'opposto di Ps e C per A. Il Pro è che si evita un blocco DB durante la chiamata API. Il Con è che se la chiamata API ha esito positivo, ma le chiamate DB non riescono, è essenzialmente necessario ripristinare le modifiche apportate tramite l'API, che potrebbero essere o non essere possibili per un determinato contesto.
Sono parziale rispetto all'opzione A personalmente, poiché sono un grande sostenitore degli approcci "meglio prevenire che curare", ma cosa ne pensate?