¿Cómo construir con éxito una API con Firebase?

Firebase es una plataforma de desarrollo de aplicaciones lanzada en 2012 y adquirida por Google dos años después. En sus inicios, Firebase se pensó solo como una base de datos para aplicaciones en tiempo real, pero Google vio su potencial y decidió agregarle servicios adicionales.

Actualmente, Firebase es un sistema BaaS (backend as a service) con 18 servicios para facilitar la creación de aplicaciones web y móviles. Entre las empresas que utilizan los servicios BaaS de Firebase se encuentran Accenture, Alibaba Travels, Stack, Twitch e Instacart, junto con más de 2300 más.

Beneficios de usar Firebase

El primero de los servicios que ofreció Firebase fue su base de datos en tiempo real, y sigue siendo uno de sus mayores atractivos. Las bases de datos de Firebase Real-time están alojadas en la nube, almacenan datos en formato JSON y se sincronizan en tiempo real con cada cliente conectado a ellas. Ya sea que use el SDK de iOS, el SDK de Android o el SDK de JavaScript, todas las aplicaciones conectadas a una base de datos Firebase Realtime comparten una instancia de la base de datos, siempre actualizada con los datos más recientes.

Cloud Firestore es otro servicio interesante de Firebase. Es una base de datos de documentos NoSQL diseñada para facilitar el almacenamiento, la sincronización y la consulta de datos para aplicaciones móviles y web a escala global. La creación de jerarquías para almacenar datos relacionados y consultas expresivas para recuperar datos permiten aprovechar todo el potencial de Cloud Firestore. A su vez, las consultas escalan según el tamaño de los resultados en lugar del tamaño del conjunto de datos. Esto permite escalar las aplicaciones desde el principio sin esperar al momento en que las necesidades superen la capacidad.

Además de los servicios de base de datos antes mencionados, Firebase también ofrece servicios de alojamiento, almacenamiento de archivos, funciones (estilo AWS Lambda), entre muchas otras cosas.

Crear una API

Las API son una forma de proporcionar servicios para que los usen sus propias aplicaciones o las de terceros. Firebase le permite proporcionar servicios personalizados que, a su vez, hacen uso de los propios servicios de Firebase sin la molestia de configurar un backend para esos servicios. Podría, por ejemplo, ofrecer acceso a una base de datos en tiempo real de Firebase para que aplicaciones de terceros consulten información recopilada por sensores industriales.

El primer paso para crear una API en Firebase es acceder a la consola base de fuego y agregue un proyecto haciendo clic en «Agregar proyecto» y dándole un nombre al nuevo proyecto. Google le dará la opción de habilitar Google Analytics para su nuevo proyecto. Se recomienda aceptar esta recomendación, ya que obtendrá beneficios como pruebas A/B y una amplia variedad de informes estadísticos de su API.

Una vez que haya creado su proyecto, podrá seleccionar los servicios de Firebase que usará su API. Para ilustrar esta tarea, veremos cómo usar el servicio de base de datos Firebase Realtime.

Configuración de una base de datos en tiempo real en Firebase

En la barra de navegación de la izquierda, dentro de la sección Desarrollar, haga clic en Base de datos en tiempo real. Aparecerá un botón «Crear base de datos» a la derecha. Haga clic en él para crear su primera base de datos en Firebase.

A continuación, deberá elegir entre varias opciones de ubicación geográfica para su nueva base de datos. Selecciona el que esté más cerca de tus usuarios. Este es un aspecto importante para minimizar la latencia de su API, particularmente en aplicaciones en tiempo real.

El siguiente paso es configurar las reglas básicas de seguridad para su base de datos. Puede optar por el modo bloqueado y luego asignar permisos de acceso según sea necesario, u optar por el modo de prueba, que habilita todas las lecturas y escrituras.

Puedes comenzar con la opción de modo de prueba para no complicar la configuración de seguridad al principio. Siempre puede crear reglas más tarde para establecer la configuración de seguridad con mayor granularidad.

Tan pronto como termine de configurar su base de datos, la API correspondiente también se habilita en la sección de API y Servicios de su consola personal en Google Cloud Platform.

Programando la API de Firebase

En este punto, ya tienes los elementos básicos de tu proyecto configurados en la consola de Firebase. El siguiente paso es escribir su código API. Para hacer eso, deberá inicializar el alojamiento y las funciones de Firebase en su computadora local. Puede instalar firebase-tools usando npm:

npm install -g firebase-tools

Luego puede iniciar sesión en firebase e inicializar su proyecto con los siguientes comandos:

firebase login firebase init

Se desplegará una pantalla de bienvenida en la que Firebase te informa de la carpeta en la que se inicializará tu proyecto, y aparecerá un menú de opciones.

En ese menú, selecciona Funciones y Hosting (la opción Hosting te permitirá tener una URL personalizada para la API que desarrollarás). Luego, elija de la lista la aplicación Firebase que creó anteriormente, después de lo cual debe seleccionar el idioma que usará. Para desarrollar una API web, puede optar por JavaScript.

Si utilizará dependencias de paquetes, instálelas con npm dentro de la carpeta de funciones. Luego puede comenzar a escribir el código para sus funciones. Recuerde incluir los paquetes firebase-functions y firebase-admin, junto con cualquier otro paquete que necesite:

import * as functions from 'firebase-functions'; 
import * as admin from 'firebase-admin';

Para usar la base de datos en tiempo real, debe especificar su URL al inicializar su SDK de JavaScript. La URL se encuentra en la sección Base de datos en tiempo real de la consola de Firebase. Puedes reconocerlo por su formato:

https://<database-name>.<region>.firebasedatabase.app

Puede usar el siguiente fragmento para inicializar su SDK, reemplazando los datos que corresponden al objeto de configuración de su proyecto:

var config = {
  apiKey: "apiKey",
  authDomain: "projectId.firebaseapp.com",
  databaseURL: "https://databaseName.firebaseio.com",
  storageBucket: "bucket.appspot.com"
};
firebase.initializeApp(config);
var database = firebase.database();

Una vez que haya escrito el código de su función API, es hora de implementar. Pero antes de hacerlo, deberá realizar algunos cambios en firebase.json, agregando las siguientes líneas, modificadas de acuerdo con la configuración de su proyecto:

"rewrites": [
     {
       "source": "/api/v1/**",
       "function": "webApi"
     }
]

El siguiente paso es el despliegue. La primera vez debes hacer un deployment completo, ejecutando el comando:

firebase deploy

En implementaciones posteriores, podrá implementar solo las funciones mediante el parámetro –only functions.

Después de ejecutar el comando de implementación, Firebase CLI muestra la URL de los extremos HTTP de sus funciones en la terminal, que puede usar para invocar sus API desde una aplicación web. La URL contiene su ID de proyecto y una región para la función HTTP. Por ejemplo, la siguiente URL se puede usar para llamar a una función de consulta de elementos pasándola itemid=1 como parámetro:

https://us-central1-apiproject-8753c.cloudfunctions.net/itemQuery?itemid=1

Para ejecutar la función, abra la URL con los parámetros correspondientes en un navegador.

Tenga en cuenta que la implementación en el entorno de producción requiere una suscripción al plan Firebase Blaze, que se paga por uso, como puede leer en la página de precios de Firebase. Es un servicio posterior a la facturación, lo que significa que se le factura por su uso al final de cada mes.

Si no tiene una suscripción a Blaze, el comando de implementación no mostrará la URL de su API. En su lugar, verá un mensaje que le informa que debe suscribirse al plan Blaze si desea realizar la implementación en el entorno de tiempo de ejecución. En este caso, aún puede usar Firebase Local Emulation Suite para compilar y probar aplicaciones en su máquina local en lugar de implementarlas en el entorno de producción de Firebase. Las pruebas locales son útiles para evitar costos innecesarios durante el desarrollo de la aplicación, ya que cada ejecución de prueba puede generar cargos en su cuenta.

Pruebas y prototipos locales

La herramienta Local Emulator Suite ofrece una interfaz de usuario integrada que hace que la creación de prototipos sea fácil y útil para probar sus aplicaciones en su máquina local.

Con la interfaz de usuario de Emulator Suite, puede probar los diseños de su base de datos, sus flujos de trabajo de Cloud Functions, analizar el rendimiento de los servicios de backend y evaluar los cambios en las reglas de seguridad, entre otras tareas. Básicamente es un entorno seguro para probar la funcionalidad de su API antes de enviarla a un entorno de producción.

Para emular sus funciones o probar su aplicación localmente, ejecute firebase emulators:start. Debe tener Java instalado para poder usar Firestore Emulator. Si no lo tienes, puedes instalarlo desde aquí.

Cuando invoque Firestore Emulator, el comando devolverá una URL que le permitirá abrir la interfaz de usuario de Emulator Suite en su navegador. De manera predeterminada, esta URL será localhost:4000, pero puede variar en cada máquina.

También obtendrá una URL completa para su función HTTP. Esta URL se verá similar a:

http://localhost:5001/apiproject-8753c/us-central1/itemQuery

solo tendrá el nombre de su proyecto, el nombre de su función y también podría tener un número de puerto diferente en su máquina local.

Para probar la función, copie la URL devuelta por el emulador, agregue los parámetros necesarios (por ejemplo, ?itemid=1) e ingréselo en una nueva pestaña de su navegador. Los resultados de la ejecución de la API aparecerán en la interfaz de usuario de Emulator Suite.

En la pestaña Registros, verá nuevos registros que indican que se ejecutó la función itemQuery(). Si su función genera nuevos datos en su base de datos de Firestore, los verá en la pestaña de Firestore.

Obtener más exposición para su API

Si desea que las API que desarrolle se vuelvan populares, Firebase también puede ayudarlo con eso. No solo porque le permite construir su aplicación más rápido, eliminando mucho del trabajo de poner en funcionamiento los servicios de back-end, sino también porque lo ayuda con el posicionamiento de su producto. ¿Cómo es eso posible? Simplemente porque las aplicaciones asociadas con Firebase se clasifican mejor en las clasificaciones de búsqueda que otras aplicaciones.

Además, tenga en cuenta la API de indexación de aplicaciones de Firebase. Esta herramienta mejora los rankings de búsqueda de enlaces de aplicaciones y ayuda a los usuarios a encontrar el contenido deseado. También coloca el botón Instalar después del botón de la página de inicio de su aplicación para que los usuarios interesados ​​estén a solo un clic de convertirse en usuarios de su aplicación.

En conclusión, Firebase no solo le ofrece servicios de back-end que aceleran considerablemente el desarrollo de su API, sino que una vez que está en funcionamiento y expuesta al mundo, también lo ayuda a promocionarla y ganar dinero con ella.