Cómo consumir una API Restful desde una aplicación Android desarrollada con Android Studio y Kotlin. Usaremos Retrofit y Gson para el acceso al APIRest. Definimos todos los ficheros Kotlin necesarios para consumir la API Restful, la configuración y las dependencias. Usaremos Jetpack Compose para mostrar el listado de elementos. Capturamos la pulsación en cada elemento a modo de ejemplo.

Requisitos para desarrollar aplicación Android en Kotlin para acceso a base de datos mediante API Rest

Servidor con servicio API Restful

Necesitaremos disponer de un servidor que proporcione los servicios de API Rest. En el siguiente tutorial explicamos cómo montar un servidor API Rest en PHP desde cero, con las acciones habituales de listar registros, insertar registros y eliminar registros:

Usaremos esta API Rest para la ampliación Android que desarrollaremos de acceso. En esta primera fase usaremos el método «listar» del API Rest anterior.

Antes de iniciar el desarrollo de la app Android con Kotlin y Android Studio, nos aseguraremos de que la API Rest funciona correctamente. Para ello, podemos usar Postman o el comando Curl o incluso un navegador web. En este caso, si ejecutamos el método «listar», nos debe mostrar todas las facturas de la base de datos MariaDB o MySQL a la que la API Rest ataca. Para el caso de la aplicación Android, al usar el servidor intermediario API Rest, debe ser agnóstica al motor de base de datos. Como decimos, si probamos el método «listar», nos mostrará un listado de todas las facturas en formato JSON:

En este caso, este es el formato del JSON que consumiremos:

En este caso, el JSON devolverá los campos: codigo, cliente, importe y fecha de cada factura.

Es importante conocer la URL de acceso a la API Rest, dado que la necesitaremos en el desarrollo de la App. En este caso, la URL base será:

proyectoa.com:8080/apirestfacturas/

Y el método para listar las facturas será:

listar.php

Android Studio y permisos de acceso a Internet

Para el desarrollo de la App usaremos Android Studio Ladybug con API 24 (targetSdk y compileSdk al nivel 35).

En el fichero AndroidManifest.xml estableceremos permisos para acceso del dispositivo a Internet, para ello añadiremos esta línea:

Advertencia de seguridad para consumo de API Restful desde app Android

Dado que se trata de una prueba de concepto y un entorno de laboratorio para desarrollo, no aplicaremos medidas de seguridad, como el uso de tokens y HTTPS, para establecer una conexión segura desde nuestra App al servidor API Restful.

Al no usar HTTPS para acceso al servicio API Restful, si compilamos la aplicación Android, nos daría este error:

Debido a que Android Studio establece una directiva de seguridad para evitar el acceso no seguro (en texto plano) mediante HTTP a un servicio API Restful. Dado que estamos en desarrollo, podremos desactivar esta directiva editando el fichero AndroidManifest.xml de nuestra app y añadiendo la siguiente línea dentro del apartado «application»:

android:usesCleartextTraffic=»true»

Explicamos la solución a este error en este enlace más en detalle:

En el caso de una aplicación de producción SIEMPRE hay que establecer mecanismos de seguridad para que la conexión entre nuestra app y el servidor API Restful, así como la transferencia de información, sea totalmente segura. Conectaremos siempre mediante HTTPS para que el tráfico viaje cifrado y estableceremos tokens y cualquier otro mecanismo para asegurar la confidencialidad e integridad de la información.

El establecimiento de estos mecanismos de seguridad no es objeto de este tutorial.

Crear proyecto Kotlin en Android Studio y establecer las dependencias

Crearemos un proyecto en Android Studio eligiendo «Phone and Tablet» y «Empty Activity». Para este ejemplo usaremos únicamente el Activity principal (Main Activity), que será donde mostremos el listado de facturas proporcionado por el API Rest:

Introduciremos el nombre del proyecto, por ejemplo «ProyectoARetrofit», el Minimun SDK a «API 24» y el language «Kotlin DSL»:

Una vez creado el proyecto Android Studio con Kotlin, añadiremos las dependencias necesarias para el uso de las librerías Retrofit y Gson, que serán las que usemos para consumir el servicio API Rest. Para ello, abriremos el fichero build.gradle.kts y añadiremos las siguientes líneas:

Tras añadir estas líneas, pulsaremos en «Sync Now» para que Android Studio se decargue los ficheros necesarios para la ejecución de estas librerías:

Tras la sincronización, Android Studio nos propondrá modificar la definición de la implementación de las librearías al nuevo formato, por lo que dejaremos las dos líneas anteriores en:

Crear data class FacturaModelo

En primer lugar crearemos el modelo de datos para la factura. Para ello agregaremos un nuevo fichero a nuestro proyecto, de tipo Kotlin:

Eligiendo «Data class» y con el nombre FacturaModelo:

En esta data class definiremos los campos del objeto factura con el que queremos trabajar, los que devuelve el API Restful. Por ello, añadiremos el siguiente contenido:

Crear clase Kotlin Util

Añadiremos un fichero Kotlin, donde colocaremos todos los procedimientos que utilizaremos en otras clases (formatear número en moneda, mostrar mensaje Toast, escribir en el Logcat, etc.). Lo llamaremos Util.kt y tendrá el siguiente contenido:

Crear interfaz ServicioAPI

Crearemos ahora una interfaz (Kotlin Interface) que será la que utilice las librerías Retrofit y Gson para el consumo del API Restful. Dicha interfaz será la encargada de acceder al servidor API Restful y la encargada de ejecutar el método de obtención de las facturas en una lista, llamando a listar.php del servidor API Restful.

La llamaremos ServicioAPI y tendrá el siguiente contenido:

Crear data class FacturaEstado

Para establecer el estado de carga de modelo vista, crearemos una nueva data class Kotlin, que llamaremos FacturaEstado y tendrá el siguiente contenido:

Crear el View Model FacturaVistaModelo

Crearemos una clase Kotlin que será el componente Vista-Modelo (View Model), encargado de llamar al ServicioAPI y obtener el listado de facturas para devolverlo como respuesta. Se llamará FacturaVistaModelo y tendrá el siguiente contenido:

Crear fichero Kotlin FacturaVista

Crearemos el fichero Kotlin que será el encargado de mostrar de forma visual en el MainActivity la lista de facturas obtenida y un pie indicando el número de facturas total. Se añaden los enventos de onClick en cada factura y en el pie, a modo de ejemplo. El fichero se llamara FacturaVista.kt y tendrá el siguiente contenido:

Modificar el MainActivity para que ejecute el Modelo-Vista en el inicio

Editaremos el fichero MainActivity para ejecutar el Modelo-Vista FacturaVistaModelo al iniciar la aplicación, quedará con el siguiente contenido:

Probar app Android que muestra un listado de facturas consumiendo un servicio API Restful

Una vez que tenemos todos los ficheros anteriores, podremos compilar la aplicación en el dispositivo virtual y comprobar que funciona correctamente:

Para realizar la prueba en un dispositivo smartphone Android real podemos generar el fichero APK, desde el menú «Build» – «Build App Bundle(s) / APK(s)» – «Build APK(s)»:

Una vez generado el APK lo enviaremos al móvil (por email, Telegram, WhatsApp, USB o cualquier otro medio:

Ejecutaremos el fichero .apk en el móvil y permitiremos su instalación. Nos advertirá de que no proviene de Play Store, pulsaremos en «Instalar sin analizar»:

Abriremos la aplicación:

La app conectará con el servidor API Restful y obtendrá y mostrará el listado de todas las facturas con los datos código, cliente, fecha e importe:

Si pulsamos en una factura, nos mostrará un mensaje con el código de la factura en la que hayamos tocado:

Si pulsamos en el pie, donde aparecen el número de facturas, también nos mostrará un mensaje indicando que hemos tocado en el pie:

Además, el control permite hacer scroll cuando las facturas no caben en la pantalla, podremos subir y bajar para verlas todas:

Descarga del proyecto completo con el código fuente y el APK de instalación

La descarga del código fuente en Kotlin del proyecto completo en Android Studio Ladybug 2024.2.2: