Firebase para desarrollo de aplicaciones web.
Published: 2019-10-26 22:46:17

![Firebase](https://miro.medium.com/max/3200/1*ipwpqQrHz0Lkd_5setXQCQ.jpeg)


Firebase es una plataforma para desarrollo de aplicaciones web de Google, es un servicio en la nube que permite abstraer el backend del sistema en desarrollo, minimiza el costo de desarrollar proyectos, es gratuito para proyectos pequeños y tiene precios escalables dependiendo de la dimensión del proyecto y cantidad de usuarios, a diferencia de otros servicios que empiezan a cobrar después de un cierto periodo de tiempo. Además, firebase no solamente se enfoca en el desarrollo web, sino que es multiplataforma, integrando desarrollo en Android, iOS y Unity.[1]

Una gran ventaja es que ya no tienes que preocuparte por los servidores en los que la base de datos será alojada. Sin embargo, firebase solamente funciona con su propia base de datos: Firestore, la cual es una base de datos no relacional que se encuentra en la nube. Lo cual puede presentarse como una desventaja para desarrolladores como yo, que solamente han trabajado con bases de datos relacionales como MySQL, PostgreSQL, Oracle, etc… Sin embargo, esto se puede llegar a presentar como una ventaja para desarrolladores que han trabajado con mongoDB.

Existen dos BD disponibles: Real time Database and Cloud Firestore, en la primera cobran por cantidad de GB subidos y descargados, por lo que se recomienda en sistemas que tienen muchas consultas a la base de datos mientras que en el segundo te cobran acción (read, write, delete), y se utiliza normalmente en sistemas que tienen mayor complejidad. 

Una característica de las bases de datos no SQL es que no hay restricciones a nivel de la base de datos sobre que tipo de datos se pueden almacenar en la BD, esto presenta una gran ventaja para los desarrolladores que usan no SQL porque pueden modificar los campos fácilmente sin correr el riesgo de romper las restricciones de la BD. Además de hacer la aplicación web, más flexible y escalable en caso de que se necesiten agregar más funcionalidades a futuro. Para ello los datos se encuentra des normalizados. La base de datos contiene colecciones de documentos, cada uno de estos se compone de campos (los documentos son objetos JSON) manera similar a mongoDB. 

Para pasar una BD relacional a una no relacional hay varias alternativas: la primera es colocar objetos dentro de documentos, esto objetos serían los que referenciaríamos con una llave foránea en una base de datos relacional, esta alternativa es eficiente cuando hay poca cantidad de datos (porque un documento solo puede contener 1 MB), sin embargo, la consulta de datos es limitada y no se pueden hacer consultad de diferentes “tablas” u objetos en este caso, entonces resulta conveniente crear las colecciones u objetos en root y referenciar las llaves dentro de los documentos de cada uno de estos (similar a lo que hacemos en una base de datos relacional). Esto al principio me pareció como algo terrible, es decir, tener información duplicada en varias partes resulta como una de las peores prácticas de desarrollo, sin embargo, después entendí que las consultas con muy sencillas a comparación de una base de datos relacional. Lo que hace que la base de datos sea muy rápida. Además, si la aplicación crece, se hace una escala horizontal que es invisible para el desarrollador mientras que en MySQL por ejemplo se tiene que hacer una escala vertical. [2]

En cuanto a la experiencia de los desarrolladores, firebase esta muy bien documentada, tiene una curva de aprendizaje rápida, es decir, es sencillo de utilizar. Maximiza el valor generado en la menor cantidad de tiempo. Se incorpora principalmente con NodeJS. Al ser un servicio de la nube tiene muchas ventajas, entre estas destacan que los servicios de autenticación están total mente relacionados a la BD. Además de ofrecer servicios de administrador, bases de datos (firestore), pruebas y servicios de notificaciones (firebase cloud messaging), donde las notificaciones se pueden dirigir a un segmento de usuarios, sobre un tema en específico o sobre un dispositivo en particular. 

Además, firebase se integra de manera muy sencilla con las APIs de google. Ofrece muchos servicios de seguridad, al hacer un deploy automáticamente utiliza https, y también que utiliza JSON web tokens para almacenar datos encriptados de los usuarios, que son mejor que utilizar las cookies. Una gran ventaja es que se pueden hacer cambios a la base de datos en tiempo real, es decir si múltiples usuarios acceden a los mismos datos, estos pueden saber fácilmente del cambio de los datos. Los datos se obtienen de la base de datos con funciones como get u snapshot. También, al actualizar los datos, las vistas son cambiadas inmediatamente, sin la necesidad de esperar la respuesta de la base de datos. [3]

**Conclusiones**

Recomendaría utilizar firebase a cualquier principiante que se encuentre desarrollando algún sistema de múltiples plataformas, sin embargo, es necesario aprender a utilizar las BD no relaciones y que el cliente este de acuerdo en utilizar y pagar el servicio mencionado. En mi caso, por ejemplo, mi cliente deseaba utilizar su propio servidor de base de datos relacional, debido a ello opté solamente por utilizar los servicios de autenticación y notificaciones de firebase que resultan muy convenientes y sencillos para autenticarse con redes sociales. Algunas advertencias serian también que tomen muy en cuenta el framework de desarrollo de la aplicación debido a que algunos de ellos se incorporan mejor con firebase.

**Referencias:**

[1] https://firebase.google.com/docs/firestore

[2] https://www.youtube.com/watch?v=v_hR4K4auoQ

[3] https://www.youtube.com/watch?v=9kRgVxULbag