Estou tentando criar uma API de descanso para um aplicativo Android. Suponha que eu tenha uma users
tabela com (id, name, email)
e uma songs
tabela com (id, song_name, album)
e uma associação de junção rica entre eles como streams
tendo (user_id, song_id, listen_count)
. Quero buscar detalhes sobre todos os fluxos e mostrá-lo no aplicativo como uma lista. A lista mostraria o nome da música, o nome do álbum, o nome do usuário e a contagem de escutas. Eu vejo três opções plausíveis -
GET
para/streams
e buscar uma lista de todos ossong_ids
euser_ids
. Em seguida, façaGET
para/user/:id
e/song/:id
para cada usuário e ID da música para obter informações sobre o usuário e a música.GET
para/streams
e buscar uma lista de todos osuser_ids
esong_ids
. Então, umGET
para/user?ids=<comma_separated_ids>
buscar informações sobre todos os usuários e umGET
parasong?ids=<comma_separated_ids>
buscar informações sobre todas as músicas.GET
para/streams
buscar tudo em uma chamada. Algo como -[ { "user_id" : 10, "song_id" : 14, "listen_count" : 5, "user" : { "id" : 10, "name" : "bla", "email" : "bla", }, "song" : { "id" : 14, "name" : "blu", "album" : "blu" } }, ... ]
Sinto-me tentado a optar pela opção 3 porque ela me dá tudo em uma ligação, mas não acho que seja muito tranquila e temo que não seja escalável. A opção 2 é boa, mas são necessárias três chamadas, o que significaria um tempo considerável para carregar a lista. E a opção 1 segue o resto, mas atenderá inúmeras chamadas para mostrar a lista e fazer tantas chamadas de um dispositivo móvel não é viável.
Qual seria a maneira recomendada de fazer isso?