Proyecto: Crea una app de Bookshelf

1. Antes de comenzar

Requisitos previos

  • Capacidad de crear y ejecutar un proyecto en Android Studio
  • Capacidad de crear diseños en Jetpack Compose
  • Experiencia con corrutinas en Kotlin
  • Experiencia con Retrofit, Coil y Gson

Qué compilarás

  • Una app para Android que realiza varias solicitudes a un servicio web y muestra imágenes descargadas de forma asíncrona.

Requisitos

  • Una computadora que tenga Android Studio instalado

2. Descripción general

¡Felicitaciones por completar la unidad 5!

Para practicar los conceptos que aprendiste en esta unidad, incluidas las corrutinas, Retrofit y Gson, compilarás una app por tu cuenta que muestra una lista de libros con imágenes de la API de Google Books.

Se espera que la app haga lo siguiente:

  • Realice una solicitud a la API de Google Books con Retrofit.
  • Analice la respuesta con Gson.
  • Muestre imágenes descargadas de forma asíncrona de los libros junto con sus títulos en una cuadrícula vertical.
  • Implemente prácticas recomendadas y separe la IU y la capa de datos con un repositorio.
  • Escriba pruebas para código que requiera el servicio de red con una inyección de dependencias.

El objetivo de este proyecto es doble. Primero, debes poner en práctica todos los conceptos que aprendiste en esta unidad. También podrás trabajar con una nueva API de REST, leer la documentación y aplicar las habilidades que aprendiste en una app nueva, tal como lo harías si fueras desarrollador profesional de Android.

En la siguiente captura de pantalla, se muestra un ejemplo de la app de Bookshelf finalizada. El diseño exacto y los libros que muestre la app dependen de ti. Si quieres obtener más información para recuperar los datos del libro, consulta las siguientes secciones.

9335665e21b79da1.png

3. Planifica tu app

Planifica tu IU

Puedes diseñar la IU de tu app como quieras. Debes considerar cómo se adapta el diseño de tu app a diferentes factores de forma de dispositivos.

Debido a que usas una cuadrícula de imágenes con desplazamiento, debes cargar varias imágenes de forma simultánea en la pantalla. Después de obtener la URL de la imagen, puedes usar el elemento AsyncImage componible proporcionado por la biblioteca de Coil para descargar los datos en segundo plano. Siempre que sea posible, asegúrate de indicar a los usuarios cuándo tu app usa la red.

Planifica la capa de red

En la ruta de aprendizaje 1 de esta unidad, aprendiste cómo obtener datos de la red y analizar respuestas de JSON. Para la app de Bookshelf, la capa de datos debe realizar las siguientes tres acciones:

  • Crear un servicio de Retrofit para obtener datos de la API de Google Books
  • Agregar métodos para que el servicio obtenga una lista de libros e información sobre un libro específico
  • Usar Gson para extraer datos significativos de la respuesta de JSON que muestra la API

Repasemos brevemente los métodos de la API de Google Books que necesitas para este proyecto.

Busca libros

La API de Google Books proporciona un método que muestra una lista de libros según un término de búsqueda específico, como se describe en Cómo usar la API.

Por ejemplo, esta URL muestra los resultados de la búsqueda para el término "jazz history".

Ejemplo

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

Existen varios parámetros de consulta para filtrar tu búsqueda. Para la app de Bookshelf, el parámetro q (que significa "consulta") es suficiente.

En la documentación, también se muestra la respuesta de JSON esperada. Para la app de Bookshelf, debes extraer el id del libro.

Solicita información para un libro específico

Para obtener información sobre un libro específico, debes enviar una solicitud. Este extremo toma el ID que se extrajo de la respuesta anterior.

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

Puedes encontrar vínculos a miniaturas en el objeto imageLinks del objeto volumeInfo. En esta app, las imágenes que deseas descargar tienen la clave 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"
    },
...

Descarga miniaturas de libros

Una vez que tengas la URL de la miniatura, se podrá proporcionar al elemento AsyncImage componible en cada elemento de la cuadrícula.

Diseño para la capacidad de prueba

Además de los conceptos de redes, también aprendiste a refactorizar una app de modo que puedas usar una clase de repositorio para la capa de datos. Para esta app, debes diseñar teniendo en cuenta la capacidad de prueba y usar un repositorio para intercambiar fuentes de datos con facilidad mediante la inyección de dependencias.

  • Incluye una interfaz de repositorio para el servicio de libros.
  • Implementa una clase de repositorio que acceda al servicio de Retrofit.
  • Implementa un servicio falso que no realice una solicitud real a la API de Google Books.
  • Escribe una prueba para el repositorio con el servicio falso.

Los datos de los libros se deben recuperar de la red desde un repositorio, lo que te permite intercambiar fuentes de datos con facilidad mediante la inyección de dependencias.

4. Compila la app de Bookshelf

Ahora que tienes una descripción general de la API de Google Books, es hora de compilar la API de Bookshelf. Aunque estés usando un servicio web diferente, ya aprendiste todos los conceptos necesarios para completar este proyecto. Si necesitas hacer un repaso, puedes volver a consultar los codelabs y las apps de ejemplo anteriores de esta unidad en cualquier momento. Los codelabs de esta unidad pueden resultarte útiles mientras trabajas en tu proyecto.

Te recomendamos que completes todos los proyectos del curso. Aunque creas saber con seguridad todo lo que aprendiste en esta unidad, es probable que debas volver a consultar los codelabs con más frecuencia de la que crees. Les sucede a todos, incluso a los instructores de este curso. Por lo tanto, diviértete con este proyecto y practica lo que aprendiste antes de pasar a la siguiente unidad.