Atualmente, estou trabalhando em um projeto com uma organização da seguinte maneira:
- Cliente - Obtém dados do servidor principal via API REST.
- Servidor - solicita dados de vários outros servidores por meio de APIs de terceiros
- APIs de terceiros - serviços fora do meu controle que fornecem dados ao servidor (Reddit, Hackernews, Quora etc.)
Por uma questão de argumento, digamos que o cliente precise primeiro de uma lista de itens de cada uma das APIs de terceiros. A partir dessa lista, um item será escolhido no momento em que o cliente precisará ver o conteúdo completo do item, bem como as respostas (isto é, comentários) ao item. Estou tentando decidir entre três opções:
À la Carte
Nessa abordagem, eu teria três pontos de extremidade separados no meu servidor: um para obter a lista de itens, um para obter o conteúdo principal de um item e outro para obter as respostas do item.
- Prós: nunca faço mais solicitações do que preciso, as solicitações devem ser pequenas e, geralmente, devem ser mais rápidas.
- Contras: Eu tenho que fazer muitos pedidos. Depois de escolher um item da lista, o usuário pode ter que esperar antes de ver o conteúdo principal e esperar ainda mais para ver as respostas
Cache do servidor
Nesta solicitação, eu faria uma única chamada ao meu servidor para "buscar" todos os dados de todas as fontes. Os dados seriam armazenados em cache no servidor. O cliente teria os mesmos pontos de extremidade REST de antes, exceto que não haveria muita espera entre as chamadas, pois meu servidor já possui os dados e apenas precisa alimentá-los com o cliente.
- Prós: Ainda fácil de implementar no lado do cliente, mas sem os problemas de latência
- Contras: um pouco mais envolvido do lado do servidor, e a primeira chamada pode demorar muito.
Cache do lado do cliente
Esse cenário é semelhante ao anterior, exceto que o cliente apenas faz uma solicitação ao servidor: forneça todos os dados. A partir daqui, é de responsabilidade do cliente salvar os dados e usá-los adequadamente.
- Prós: Fácil implementação do servidor, muito rápido após a primeira chamada
- Contras: a primeira chamada será muito lenta, implementação mais complicada do lado do cliente
Não tenho certeza de qual é a melhor abordagem ou se talvez eu esteja perdendo a solução óbvia. Qualquer conselho seria muito apreciado!