Stiamo pianificando la creazione di un'applicazione web che consumerà i dati da un'API REST interna che centralizza tutti i dati aziendali "core". Per questioni di dimostrazione, supponiamo che questa API esponga i dati per un database di prodotti di grandi dimensioni. Quindi un esempio della nostra applicazione web che utilizza l'API sarebbe:
Una vista che elenca tutti i prodotti e l'utente può aggiungere prodotti alla sua "lista dei desideri". (Esempio molto sciocco)
Ora, la difficoltà è: ogni volta che dovremmo sapere di un prodotto utente, avremmo bisogno di inviare una richiesta all'API per ottenere i nomi dei prodotti e altri dati, dato che dovremmo solo salvare il suo ID internamente. Questo è ok in questo semplice esempio, ma ci saranno casi molto più complessi di questo (Report, ad esempio) e sembra proprio molto sbagliato recuperare sempre i dati dall'API. Quindi abbiamo creato diversi approcci:
1 : recupera i prodotti dall'API sulle viste che creano i record e li salvano internamente nel nostro database. Le altre aree che utilizzano i prodotti, le interrogherebbero dal nostro Database non dall'API.
2 - Una sorta di strategia di memorizzazione nella cache. Ma dove? Chi sarebbe il responsabile della memorizzazione nella cache? L'API o il client? In tal caso, quali strategie sarebbero più adatte a questo caso?
Il caso 1 suona come una soluzione plausibile ma creerebbe un problema di sincronizzazione. Dovremmo controllare spesso per vedere se sono state apportate modifiche (il suo nome, ad esempio).
Il caso 2 sembra buono ma personalmente non ho mai visto un'architettura simile prima né ne ho implementato uno.
Un'altra cosa che è emersa è stata: se salvassimo solo gli ID nel nostro db locale, quando abbiamo bisogno di "costruire" la vista con tutti i dati, avremmo bisogno di interrogare il nostro db locale ottenendo tutti gli id del prodotti utente, inviare una richiesta all'API per ottenere i prodotti. Il problema? L'API non conosce la relazione tra utente - > prodotti quindi dovremmo interrogare tutti i prodotti e in qualche modo unire i dati dalla nostra parte.
Qualunque tipo di consiglio, esperienza condivisa o praticamente qualsiasi input sarebbe molto apprezzato.
PS1: sia l'API che l'app Web sono scritte in C #.
PS2 : quando ho detto "API interna" nella domanda, intendevo che si tratta di un'API progettata dal nostro team. L'esterno nel titolo significa che l'API verrà separata dalla nostra app Web, agendo come una risorsa esterna.