Artículo
· 4 feb, 2024 Lectura de 7 min

Modulo para Firebase : Desatando el poder de Firebase RealTime Database con InterSystems IRIS

         

 

Hola, comunidad!

He estado trasteando últimamente con Flutter y he desarrollado algunas aplicaciones que usan Firebase como base de datos. Cuando descubría que existía una librería de Firebase para Python, tuve el impulso de que debía crear algo con InterSystems IRIS que pudiese hacer que se comunicase con Firebase Database RealTime y realizar operaciones CRUD. Justo entonces me encontré con esta idea de Evgeny en el portal de ideas:

 

https://ideas.intersystems.com/ideas/DP-I-146 

 

Y me puse manos a la obra!
 

¿Tienes curiosidad por ver que he creado? Entonces abróchate el cinturón porque empezamos!.


Pero, vayamos paso a paso.

 

Paso 1 - ¿Que demonios es Firebase?

 

Bien, Firebase Realtiem Database (de ahora en adelante RTDB) es una base de datos almacenada en la nube. Se trata de una base de un servicio de base de datos NoSQL que permite a los desarrolladores almacenar y sincronizar datos en tiempo real entre usuarios. Permite que todos los dispositivos conectados reciban las actualizaciones automáticamente en cuanto sucede un cambio. Es una solución perfecta para aplicaciones que necesitan actualizaciones en tiempo real si importar que usuario o servicio realiza el cambio.
 

¿Sigues estando interesado? Ok, dejemos que la aventura empiece!


 

Paso 2 - Creemos nuestra app en Firebase! 🚀🔥

 

Ve a https://console.firebase.google.com/ y haz login o regístrate. Necesitarás una cuenta de Google para hacerlo.

 

Una vez dentro, presiona el botón "Añadir proyecto":

 


 

Ponle un nombre:

 


 

Ahora, puedes decidir si quieres o no activar Google Analytics (Yo lo he desactivado).

 

Espera unos segundos mientras el proyecto se crea:

 

Después de una pequeña espera, se habrá completado.

 

¡Felicidades! Tu aplicación de Firebase está vivita y coleando!!.


 

Paso 3 - Creando nuestra Realtime Database:

 

Haz click en "Productos" y luego en "Realtime Database".
 

 

 

Finalmente, haz click en "Crear Base de datos".

 


 

Elige la ubicación de la base de datos:

 

Elige las reglas. (Hay 2 opciones: Lock mode, donde solo usuarios autenticados podrán realizar operaciones, o Test Mode, donde cualquier usuario que conozca la url de la base de datos podrá realizar operaciones CRUD.)

 

 

En este caso, optaremos por Locked Mode, Marca la opción y pulsa en "Activar". Espera unos segundos y la base de datos estará lista.

 

Una vez la base de datos está lista, copia la URL de la misma y guardala (nos hará falta mas adelante).


Es hora de configurar las reglas para admitir solo conexiones autorizadas:

 

Estas son mis reglas:

 

Con estas reglas, podrás mantener a los usuarios no autorizados alejados.



El código de la regla sería algo si:

{

 "rules": {

     "$uid": {

      ".write": "auth.uid == $uid",

      ".read":  "auth.uid == $uid"

     }

   

 }

}



 

Ya casi hemos terminado! Solo un último paso en Firebase!.

 

 

Paso 4 - Generando nuestro fichero de Certificado:

 

Ve a la sección de Ajustes del Proyecto:

 

Ahora accede a la pestaña "Service accounts", selecciona Python, y pulsa sobre "Generar nueva clave privada".

 


Guarda el fichero nos hará falta mas adelante.


 

Paso 5 - Clona el repositorio o instala IrisFirebase con ZPM:

 

Repositorio: https://github.com/daniel-aguilar-garcia/irisfirebase

 

Paquete ZPM : iris-firebase


 

Paso 6 - Configuremos Firebase en InterSystems:


Primero, copia el fichero de las credenciales que descargaste de Firebase en el paso 4:

 

Si estás usando la versión Docker, copia el fichero en la ruta del proyecto y actualiza el nombre del fichero en el fichero Dockerfile:

 


 

Una vez hayas realizado los cambios anteriores, inicia el Docker.


Por otro lado, si lo que quieres hacer es añadir el modulo de Firebase a tu servidor, copia el fichero de las credenciales en una ruta que sepas que el servidor IRIS va a tener acceso.

 

Paso 7 - Dejemos fluir la magia!

 

Ahora, ya estamos listos para configurar la conexión con nuestra aplicación de Firebase. Abre un Terminal y ejecuta el siguiente comando:

 

do ##class(Firebase.RTDB).ConfigApp(appName,url,credentialFile)

 

Explicación de los parámetros:

 

appName: Cualquier nombre random que te venga a la cabeza (Pero recuerda no olvidardo xD ).

 

URL: La URL de la base de datos que has copiado en El Paso 3

 

credentialFile: el nombre de tu fichero de las credenciales, incluyendo la extensión .json

 

Ejemplo:

 

do ##class(Firebase.RTDB).ConfigApp("myApp","https://irisfirebaseexample-default-rtdb.firebaseio.com/","irisfirebaseexample.json")


 

Felicidades! Espero que te haya gustado!. Sígueme en mis siguientes artículos!.

 

¿Que?... ¿No ha sido suficiente?..

 

Tranquilo, solo bromea. Empecemos con lo divertido!.


 

Paso 8 - Creando tu primer MegaSuperMágico registro:

Para crear un nuevo registro, solo necesitas estas 4 cosas:

 

  1. El nombre de tu aplicación
  2. Los datos que quieres guardar (Es un objeto JSON)
  3. El nombre de la tabla (nodo)
  4. Un ID

 

Ejemplo:


 

ClassMethod TestCreate()

{

   Set objTest = {}

   Set objTest.title = "Title the title"

   Set objTest.detail = "The dummy message"

   Set id = "00001"

  

   Set id=##class(Firebase.RTDB).Create("appNotas",objTest,"notes",id)

   U 0 w id,!

   Q id

}



 

El resultado será algo como esto:

 



¿Lo has notado? Hay algo familiar... pero... que es exactamente?

¿Que pasaría si representaremos esta información así?

 

^notes(“00001”,”detail”)=”The dummy message”

^notes(“00001”,”title”)=”Title the title”

 

Exacto! es un global!!

 

Como puedes comprobar, parece ser que el mundo entero finalmente se ha dado cuenta que las tablas relacionales son un sistema obsoleto, y ahora todo el mundo está alucinando con soluciones muy similares a nuestros queridos Globals ;-).


 

Paso 9 - Leyendo registros:

 

Podemos leer un solo registro o un nodo completo de la siguiente manera:

 

Leyendo un simple registros, sería algo así:


 

Es fácil. Únicamente tienes que invocar el metodo Read, indicando la aplicación, tabla (nodo) e ID.

 

ClassMethod TestRead()

{

   Set id = "00001" //..TestCreate()

  

   Set response=##class(Firebase.RTDB).Read("appNotas","notes",id)

   U 0 w response.title,!

   U 0 w response.detail,!

}


 

Comprueba el resultado a continuación:


Ahora añadamos algunos registros extra:

 


Es hora de leer el nodo "notas" para recuperar todos los detalles:

 

ClassMethod TestReadFullTable()

{

  

   Set response = {}

   Set response=##class(Firebase.RTDB).ReadTable("appNotas","notes")

   U 0 w response.%ToJSON(),!

}

 

Y aqui está el resultado:

 

 

 


 

Paso 10 - Actualizando datos:

Actualizar un registro es muy fácil!, simplemente pasa el nombre de la aplicación, el nombre de la tabla (nodo), el ID y el objeto (formato json)

 

Ejemplo:

ClassMethod TestUpdate()

{

   Set id = "00001" //..TestCreate()

   Set objTest = {}

   Set objTest.title = "Title updated"

   Set objTest.detail = "Text message updated"

   Set id=##class(Firebase.RTDB).Update("appNotas","notes",id,.objTest)

   U 0 w id,!

}


Echa un vistazo al maravilloso resultado:



Genial!. Ahora démosle a estos absurdos registros lo que se merecen!!.


 

Paso 11 - Borrando registros:

 

Vamos a borrar el registro con el ID "00002"
 

ClassMethod TestDelete()

{

   Set id = "00002" //..TestCreate()

   Set res=##class(Firebase.RTDB).Delete("appNotas","notes",id)

   U 0 w res,!

}


Listo! Ahora el registro "00002" está durmiendo en el fondo del océano.

 

 




Si quieres enviar el nodo completo con el tío Calamardo, puedes simplemente omitir el parámetro ID:

 

ClassMethod TestDeleteNode()

{

   Set res=##class(Firebase.RTDB).Delete("appNotas","notes")

   U 0 w res,!

}


¡Adios notas!!

 



 

En resumen:

 

Crear un registro:

 

##class(Firebase.RTDB).Create("appName",objData,"tableName",id)

 

Actualizar un registro:

 

##class(Firebase.RTDB).Update("appName","tableName",id,.objTest)


 

Leer un único registro:

 

##class(Firebase.RTDB).Read("appName","tableName",id)

 

Leer un nodo completo:

 

##class(Firebase.RTDB).ReadTable("appName","tableName")

 

Borrar un único registro:

 

##class(Firebase.RTDB).Delete("appName","tableName",id)

 

Borrar el nodo completo:

 

##class(Firebase.RTDB).Delete("appName","tableName")




Esto es todo amigos!! (por ahora)

 

Este módulo podría extenderse para usar otras interesantes funciones de Firebase, incluyendo:

 

  • Authentication 
  • Cloud Firestone
  • Storage
  • Cloud Messaging


¿Estas interesado en alguna de ellas? Por favor, házmelo saber en los comentarios (tus comentarios son siempre bienvenidos).

 

¿Te ha gustado el artículo? Entonces dale a like y recuerda, intentaré despejar todas vuestras dudas lo mejor que pueda, escríbeme tus dudas en la sección de comentarios.
 

Gracias por leerme!!

Comentarios (0)1
Inicie sesión o regístrese para continuar