Sto cercando di creare un'API di riposo per un'app per Android. Supponiamo di avere una tabella users con (id, name, email) e una tabella songs con (id, song_name, album) e un'associazione ricca di join tra di loro come streams con (user_id, song_id, listen_count) . Voglio recuperare i dettagli su tutti i flussi e mostrarli nell'app come elenco. L'elenco mostrerebbe il nome del brano, il nome dell'album, il nome utente e il numero di ascolti. Vedo tre opzioni plausibili -
-
GETa/streamse recupera un elenco di tutti isong_idseuser_ids. Quindi impostaGETa/user/:ide/song/:idper ciascun utente e id canzone per ottenere le informazioni su utente e brano. -
GETa/streamse recupera un elenco di tutti iuser_idsesong_ids. Quindi unGETa/user?ids=<comma_separated_ids>per recuperare informazioni su tutti gli utenti e unGETsusong?ids=<comma_separated_ids>per recuperare informazioni su tutti i brani. -
GETa/streamse recupera tutto in un'unica chiamata. Qualcosa come -[ { "user_id" : 10, "song_id" : 14, "listen_count" : 5, "user" : { "id" : 10, "name" : "bla", "email" : "bla", }, "song" : { "id" : 14, "name" : "blu", "album" : "blu" } }, ... ]
Sono tentato di optare per l'opzione 3 perché mi dà tutto in una sola chiamata, ma non penso che sia molto pieno e temo che non sia scalabile. L'opzione 2 è buona, ma ci vogliono 3 chiamate, il che significherebbe un tempo considerevole per caricare la lista. E l'opzione 1 segue il riposo, ma richiederà numerose chiamate per mostrare l'elenco e fare così tante chiamate da un dispositivo mobile non è fattibile.
Quale sarebbe la soluzione consigliata per questo?