Projeto: criar um app Bookshelf

1. Antes de começar

Pré-requisitos

  • Saber criar e executar um projeto no Android Studio.
  • Saber criar layouts no Jetpack Compose.
  • Experiência com corrotinas em Kotlin.
  • Experiência com Retrofit, Coil e Gson.

O que você vai criar

  • Um app Android que faz várias solicitações a um serviço da Web e mostra imagens assíncronas transferidas por download.

O que é necessário

  • Um computador com o Android Studio instalado.

2. Visão geral

Parabéns por concluir a unidade 5!

Para praticar os conceitos aprendidos nesta unidade, incluindo corrotinas, a Retrofit e o Gson, você vai criar um app que mostra uma lista de livros com imagens da API Google Books.

Espera-se que o app faça o seguinte:

  • Faça uma solicitação para a API Google Books usando a Retrofit.
  • Analise a resposta usando o Gson.
  • Mostre imagens salvas dos livros de forma assíncrona em conjunto com os títulos em uma grade vertical.
  • Use um repositório para implementar as práticas recomendadas, separando a interface e a camada de dados.
  • Crie testes de código que exigem o serviço de rede usando a injeção de dependência.

O objetivo deste projeto é duplo. Primeiro, que você coloque em prática todos os conceitos aprendidos nesta unidade. Que você também possa trabalhar com uma nova API REST, ler a documentação e aplicar as habilidades que aprendeu a um novo app, como faria sendo um desenvolvedor Android profissional.

A captura de tela abaixo mostra um exemplo do app Bookshelf final. O layout exato e os livros mostrados pelo app dependem de você. Saiba mais sobre como recuperar os dados de livros nas seções a seguir.

9335665e21b79da1.png

3. Planejar seu app

Planejar a interface

Você pode criar a interface do app como quiser. É preciso considerar como o layout do app se adapta a diferentes formatos.

Como você está usando uma grade de imagens de rolagem, é preciso carregar várias imagens simultaneamente na tela. Depois de extrair o URL da imagem, você pode usar o elemento combinável AsyncImage fornecido pela biblioteca Coil para fazer o download dos dados em segundo plano. Sempre que possível, indique aos usuários quando o app estiver usando a rede.

Planejar a camada da rede

No programa de treinamentos 1 desta unidade, você aprendeu a receber dados da rede e analisar respostas JSON. Para o app Bookshelf, a camada de dados precisa fazer as três ações a seguir:

  • Criar um serviço da Retrofit para receber dados da API Google Books.
  • Adicionar métodos para que o serviço receba uma lista de livros e informações sobre um livro específico.
  • Usar o Gson para extrair dados significativos da resposta JSON retornada pela API.

Vamos ver rapidamente os métodos da API Google Books que você precisa para esse projeto.

Pesquisar livros

A API Google Books oferece um método que retorna uma lista de livros com base em um termo de pesquisa específico, conforme descrito em Como usar a API.

Por exemplo, este URL retorna resultados da pesquisa para o termo "jazz history" (história do jazz).

Exemplo

https://www.googleapis.com/books/v1/volumes?q=jazz+history

Há vários parâmetros de consulta para filtrar sua pesquisa. Para o app Bookshelf, o parâmetro q (abreviação de consulta em inglês) é suficiente.

A documentação também mostra a resposta JSON esperada. Para o app Bookshelf, é necessário extrair o id do livro.

Solicitar informações de um livro específico

É necessário fazer uma solicitação para conseguir informações sobre um livro específico. Esse endpoint usa o ID extraído da resposta anterior.

https://www.googleapis.com/books/v1/volumes/<volume_id>

É possível encontrar links de miniatura no objeto imageLinks no objeto volumeInfo. Para este app, as imagens que você quer transferir por download ficam abaixo da chave thumbnail.

...
    "imageLinks": {
      "smallThumbnail": "http://books.google.com/books/publisher/content?id=EPUTEAAAQBAJ&printsec=frontcover&img=1&zoom=5&edge=curl&imgtk=AFLRE734s3CngIs16gM_Ht6GeGF4ew664I7oOGghmfk4pgfFcDYb4GlYCYdjtqqXluL2KUyfq_Ni5MSyv4JxEJ8W679zQ2Ib3okUKau3I1ruqBGrWOt2_haUauWC8sXEgjN7JHm4uOjS&source=gbs_api",
      "thumbnail": "http://books.google.com/books/publisher/content?id=EPUTEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&imgtk=AFLRE71N0ldzv6rliUV_K5ZACa9yPNcT8Ino6YKXJUMje_z4GsC9cp6gFql5TxlmqMoYN3CDhM3XAIO2riFeMXUnFVr5pTLq91htTtG1DDyvOdiR4yI6xu3yEEAn0dRbvNFZ5m7dUC9E&source=gbs_api",
      "small": "http://books.google.com/books/publisher/content?id=EPUTEAAAQBAJ&printsec=frontcover&img=1&zoom=2&edge=curl&imgtk=AFLRE71HmTwpoe3KR0AISYk5sDgV2Fz-F-6CDKJtFdvlXSZv3jEzFtsSXGJnEGjtCuoDMxP_6sgP8au1yadB7OmI2MhIBquel7ivcDB8e9ieLyh4HNoXnX3zmxfF_CfIfnNXDv0WHuyA&source=gbs_api",
      "medium": "http://books.google.com/books/publisher/content?id=EPUTEAAAQBAJ&printsec=frontcover&img=1&zoom=3&edge=curl&imgtk=AFLRE72LMPH7Q2S49aPeQ3Gm8jLEf6zH4ijuE0nvbOyXBUAgyL816pXzaw0136Pk8jXpfYYFY0IsqL7G7MMDMgKcJhnaoHojWNZpljZmGHeWLL_M7hxkOpmdmO7xza8dfVfPbFmBH4kl&source=gbs_api",
      "large": "http://books.google.com/books/publisher/content?id=EPUTEAAAQBAJ&printsec=frontcover&img=1&zoom=4&edge=curl&imgtk=AFLRE71w0J9EOzUzu1O5GMbwhnpI8BLWzOEtzqc9IfyxEDqimZ--H4JlNAZh_1zx8pqPNRf1qDt7FPb57lH5ip-LBlK3zjMC-MCBYcciuoPjTJOFmLv7pp5B6_-UFBap1KRfC0eG7P4d&source=gbs_api",
      "extraLarge": "http://books.google.com/books/publisher/content?id=EPUTEAAAQBAJ&printsec=frontcover&img=1&zoom=6&edge=curl&imgtk=AFLRE73t0gcxT-jzEETp8Yo5Osr15nVL7ntKL2WSe2S8kRSio7w0CGgErAq4WbPWIsH4TmOdP_EO6ZoPNSP-YGSOwqfPMw8_IlYE6hy9IKeAs5V_xaHy7drZleF0eizAQiEVg5ci7qby&source=gbs_api"
    },
...

Fazer o download de miniaturas de livros

O URL da miniatura pode ser fornecido ao elemento combinável AsyncImage em cada item da grade.

Design para capacidade de teste

Além dos conceitos de rede, você também aprendeu a refatorar um app ao usar uma classe de repositório para a camada de dados. Para este app, faça o design pensando na capacidade de teste, usando um repositório para trocar facilmente as fontes de dados com a injeção de dependência.

  • Inclua uma interface de repositório para o serviço de livros.
  • Implemente uma classe de repositório que acesse o serviço da Retrofit.
  • Implemente um serviço simulado que não faça uma solicitação real à API Google Books.
  • Crie um teste para o repositório usando o serviço simulado.

Os dados do livro precisam ser recuperados da rede usando um repositório, o que permite alternar facilmente as fontes de dados com a injeção de dependência.

4. Criar o app Bookshelf

Agora que você tem uma visão geral da API Google Books, é hora de criar a API Bookshelf. Mesmo usando outro serviço da Web, você já aprendeu todos os conceitos necessários para concluir este projeto. Confira os codelabs anteriores e veja apps de exemplo desta unidade se precisar de uma revisão. Os codelabs nesta unidade podem ser úteis para você trabalhar no seu projeto.

Recomendamos que você conclua todos os projetos do curso. Mesmo que você se sinta confiante sobre tudo o que aprendeu nesta unidade, é provável que precise consultar os codelabs com mais frequência do que pensa. Acontece com todos, até com os instrutores deste curso. Portanto, divirta-se com este projeto e pratique o que você aprendeu antes de passar para a próxima unidade.