Estou tentando criar uma API de descanso para um aplicativo Android. Suponha que eu tenha uma userstabela com (id, name, email)e uma songstabela com (id, song_name, album)e uma associação de junção rica entre eles como streamstendo (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 -
GETpara/streamse buscar uma lista de todos ossong_idseuser_ids. Em seguida, façaGETpara/user/:ide/song/:idpara cada usuário e ID da música para obter informações sobre o usuário e a música.GETpara/streamse buscar uma lista de todos osuser_idsesong_ids. Então, umGETpara/user?ids=<comma_separated_ids>buscar informações sobre todos os usuários e umGETparasong?ids=<comma_separated_ids>buscar informações sobre todas as músicas.GETpara/streamsbuscar 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?