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 -
-
GET
a/streams
e recupera un elenco di tutti isong_ids
euser_ids
. Quindi impostaGET
a/user/:id
e/song/:id
per ciascun utente e id canzone per ottenere le informazioni su utente e brano. -
GET
a/streams
e recupera un elenco di tutti iuser_ids
esong_ids
. Quindi unGET
a/user?ids=<comma_separated_ids>
per recuperare informazioni su tutti gli utenti e unGET
susong?ids=<comma_separated_ids>
per recuperare informazioni su tutti i brani. -
GET
a/streams
e 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?