Primeros pasos con Firebase / Firestore: almacenamiento transparente de datos en servidor.

Primeros pasos con Firebase / Firestore para el almacenamiento y recuperación de datos en el servidor.

 

Antes de empezar recordar que este tutorial forma parte de una cadena de tutoriales en las que pretendo simplemente probar tecnologías actuales. Aquí abajo podrás encontrarlos :

 

También  me gustaría que vieras este video de 2 minutos para entender dónde estamos y a dónde vamos

https://twitter.com/i/status/1214946355023634432


Mi equipo es Mac

macOS Catalina
Versión 10.15.2

MacBook Pro (15-inch, 2018)
Procesador 2,9 GHz Intel Core i9 de 6 núcleos
Memoria 32 GB 2400 MHz DDR4
Gráficos Intel UHD Graphics 630 1536 MB


Siguiendo nuestra colección de tutoriales sobre el desarrollo de TypeScript nos quedaba un punto interesante, el almacenamiento y recuperación de datos del servidor.

Cesar Alberca proponía la utilización de Firebase y la verdad es que es una solución muy sencilla y transparente.

Antes de seguir os invito ver este video que me ha ayudado mucho:  Firebase – Ultimate Beginner’s Guide en

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

Lo primero que vamos a hacer es abrirnos una cuenta en Firebase.

Una vez creada, podemos darle a “Añadir Proyecto”.

Le he llamado “juegoroberto”.

Te dice que si quieres añadir Analytics. Yo en este caso le he dicho que no.

Se nos crea nuestro nuevo proyecto.

Uso el plan gratuito.

Cuando usemos una aplicación Web o movil debemos decidir el tipo de autenticación.

Podemos utilizar anónima o usuario y contraseña para registrar a priori algunos.

Ahora vamos a crear una base de datos. Voy a elegir Firestore.

Defino el modo de prueba para la base de datos, en 30 días se desactivará sin hacer nada.

Elegimos la ubicación, es este caso eur3 (europe-west). Estos detalles habría que mirarlos con cariño por temas de LOPD y RGPD.

Vamos a crear una colección.

La llamo coleccionjuego.

La bases de datos son estilo MongoDB, noSQL donde cada entrada es un documento JSON.

Vamos a insertar un nuevo documento (con id automático) y dos campos: usuario y Puntuación (no creo que sea una buena idea crear campos con mayusculas ni acentos) pero he probado y funciona todo correctamente.

Ahora vamos a conseguir las credenciales para poder acceder desde una aplicación. Para ello damos a registrar aplicación Web.

Nos genera una entrada que tenemos que simplemente copiar y pegar en nuestro documento TypeScript.

Ahora nos vamos a MS Visual Studio Code.

Si no tenemos el proyecto configurado para node escribiremos npm init para conseguir un fichero package.json.

Como nosotros partimos de nuestro proyecto solamente tendremos que ejecutar npm install -save firefase.

Os recomiendo actualizar las dependencias.

En mi caso he creado un nuevo script en package.json para ejecutarlo de vez en cuando.

  «updatempm»: «npm update –save/–save-dev -f»

Nuestro proyecto tendrá un fichero indexfirebase.html y otro llamado indexfirebase.ts con el código que ejecutaremos.

Modifico el Script de Parcel para arrancar automáticamente ese nuevo html. (indexfirebase.html).

Ahora vamos a instalar las herramientas de Firebase. Usamos el comando:

npm install -g firebase-tools

Una vez instalados los paquetes vamos a hacer login en local para tener acceso a la información del servidor desde nuestro entorno de desarrollo.

Firebase login

Nos pide que nos loguemos con nuestra cuenta y le damos permisos.

Nos dice que todo ha ido bien,

Ahora desde la línea de comando podemos usar el comando: firebase init database

Nos aparecen unas pantallas a modo de menú.

Automáticamente nos crea los ficheros que necesitamos para trabajar: firebase.json

Y database.rules.json

También un fichero .firebaserc

Con esto ya tenemos todo lo que necesitamos para la infraestructura,

Solamente necesitamos escribir el código para acceder a nuestra colección y recuperar un documento.

Y podemos comprobar en la consola cómo lo recuperamos.

Podemos irnos a la Web de firebase e insertar otros documentos.

Por suerte, tenemos también extensiones de MS Visual Studio Code que nos permiten manipular nuestra base de datos sin salir del entorno. Instalamos Firebase Explorer.

Ahora aparece una nueva opción en la que podemos ver la base de datos, colección, y documentos.

Es más, con el botón derecho podemos generar el código para acceder al documento seleccionado.

Vamos ahora a aprender como insertan un documento,

Este es el código (función add).

let nuevosdatos = {
  usuario: "Pepitop",
  Puntuación: "88"
};

console.log("Añadimos documento");

// Add a new document in collection "cities" with ID 'LA'
let setDoc = bd
  .collection("coleccionjuego")
  .add(nuevosdatos);

  let addDoc = bd.collection('coleccionjuego').add({
    usuario: 'Ana',
    Puntuación: 20
  }).then(ref => {
    console.log('Añadido documento con referencia: ', ref.id);
  });

Ahora vamos a ver cómo recuperamos documentos (5) ordenados por puntuación (descendente).

let colleccionResultados = bd.collection("coleccionjuego");
let consulta = colleccionResultados
  .orderBy("Puntuación", "desc")
  .limit(5)
  .get()
  .then(snapshot => {
    if (snapshot.empty) {
      console.log("No se encontraron documentos.");
      return;
    }

    snapshot.forEach(doc => {
      console.log(doc.id, "=>", doc.data());
    });
  })
  .catch(err => {
    console.log("Error recuperando documentos", err);
  });

Podemos ver el resultado en el navegador.

Aquí tenéis el fichero fuente completo con varias operaciones funcionando.

// Firebase App (the core Firebase SDK) is always required and
// must be listed before other Firebase SDKs
let firebase = require("firebase/app");

// Add the Firebase products that you want to use
require("firebase/auth");
require("firebase/firestore");

var firebaseConfig = {
  apiKey: "AIzaSyB-dhySzacXWXrD3bv-PwGC7UB-Ww",
  authDomain: "juegoroberto-ac9a2.firebaseapp.com",
  databaseURL: "https://juegoroberto-ac9a2.firebaseio.com",
  projectId: "juegoroberto-ac9a2",
  storageBucket: "juegoroberto-ac9a2.appspot.com",
  messagingSenderId: "9676380639",
  appId: "1:967619380639:web09fec166a9aa"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);

let bd: any = firebase.firestore();

let coleccionDoc: any = bd
  .collection("coleccionjuego")
  .doc("qUlVB9JrQbDjyraailYq");

coleccionDoc.get().then(doc => {
  let datos = doc.data();
  // console.log("Mostramos los datos " + datos.usuario);
});
/*

let nuevosdatos = {
  usuario: "Pepitop",
  Puntuación: "88"
};

console.log("Añadimos documento");

// Add a new document in collection "cities" with ID 'LA'
let setDoc = bd
  .collection("coleccionjuego")
  .add(nuevosdatos);

  let addDoc = bd.collection('coleccionjuego').add({
    usuario: 'Ana',
    Puntuación: 20
  }).then(ref => {
    console.log('Añadido documento con referencia: ', ref.id);
  });

  */

let colleccionResultados = bd.collection("coleccionjuego");
let consulta = colleccionResultados
  .orderBy("Puntuación", "desc")
  .limit(5)
  .get()
  .then(snapshot => {
    if (snapshot.empty) {
      console.log("No se encontraron documentos.");
      return;
    }

    snapshot.forEach(doc => {
      console.log(doc.id, "=>", doc.data());
    });
  })
  .catch(err => {
    console.log("Error recuperando documentos", err);
  });

Bueno, supongo que habréis visto lo fácil que es tener una base de datos en el servidor donde guardar de un modo transparente nuestra información y su recuperación.

Con todos los componentes resueltos ya solo nos queda hacer nuestro programa, nuestro juego de Arkanoid.

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Creador y propietario de AdictosAlTrabajo.com, Director General de Autentia S.L., Profesor asociado en IE Business School, inversor en StartUps y mentor de emprendedores. Ingeniero Técnico de Telecomunicaciones y Executive MBA por IE Business School 2007. Twitter: Follow @rcanalesmora Autor de los Libros: Planifica tu éxito: de aprendiz a empresario, Informática profesional, las reglas no escritas para triunfar en la empresa, Conceptos ágiles aplicados a distintas áreas de una empresa y Conversaciones con CEOs y CIOs sobre Transformación Digital y Metodologías Ágiles. ¡Descárgalos gratis aquí! Puedes consultar mi CV y alguna de mis primeras aplicaciones (de los 90) aquí.

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

Tutoriales
Evita errores y pérdida de alineación en tus APIs asíncronas. Descubre cómo AsyncAPI y ZenWave SDK pueden ayudarte a prevenir el API Drift mediante generación de código automatizada y buenas prácticas DevOps.
Tutoriales
La segmentación predictiva en tiempo real optimiza la publicidad digital con IA y datos masivos, mejorando conversión y eficiencia en la inversión publicitaria.
Tutoriales
Desarrollo de apps en Android Automotive OS: configuración, interacción con el Host, UI con Car App Library, navegación y pruebas en emulador