Manteniamo un'API che come parte del suo scopo effettua una chiamata a un'API esterna. Questa API esterna impiega alcuni secondi per soddisfare la richiesta che facciamo. Con la nostra architettura attuale la richiesta viene effettuata in modo sincrono, il che significa che la risposta http che restituiamo alla richiesta dell'utente viene bloccata finché il nostro servizio non riceve la risposta dall'API esterna.
Sto pensando di cambiare la nostra architettura per essere in grado di gestire la richiesta in modo asincrono ... Con questo intendo accettare la richiesta dell'utente nella nostra API e mettere un messaggio in coda in modo da restituire una risposta http molto più veloce. La risposta conterrebbe l'indirizzo di dove è possibile trovare il risultato completo / completo. Un'attività in background dovrebbe quindi prelevare i messaggi dalla coda ed effettuare la chiamata all'API esterna, quindi archiviare il risultato all'indirizzo fornito nella nostra risposta. L'indirizzo può quindi essere interrogato dall'utente / client fino a quando viene raggiunto lo stato desiderato della respregazione (cioè quando l'attività in background ha terminato di chiamare l'api esterna e ha memorizzato il risultato).
Questa architettura mi è stata principalmente rimossa dal libro REST in Practice. Il punto cruciale è che la nostra API esterna impiega solo 2-3 secondi per restituire la risposta. L'esempio nel libro descrive un processo di ordinazione che potrebbe richiedere minuti o ore. Questa soluzione suggerita vale l'aumento di complessità per un tempo di risposta così breve dalla nostra dipendenza esterna? Ad esempio, l'applicazione continuerà a scalare con l'architettura sincrona esistente?