Hugo Estévez
Twitter: @hugoer85
Github: Hugoer
Introducción a Firebase
Email: hugoerdev@gmail.com
- Frontend developer en Sivsa
- Apasionado por el desarrollo web
Introducción a Firebase
- Freelance a tiempo parcial
Introducción a Firebase
Introducción a Firebase
Introducción a Firebase
Creamos la Aplicación en la consola de Firebase
Introducción a Firebase
Recuperamos la configuración de nuestro proyecto
Configuración \ general
Introducción a Firebase
Incluimos la configuración en nuestros ficheros js (Aplicación Web)
Introducción a Firebase
Configuramos los métodos de inicio de sesión (Pestaña Authentication)
Introducción a Firebase
Creamos un usuario desde la consola de Firebase
Introducción a Firebase
Ya tenemos la consola de firebase preparada para empezar a desarrollar!
¿Dónde busco información?
En su documentación (Es buenísima):
Introducción a Firebase
Primero tenemos que generar una referencia al nodo de la base de datos
var jsVigoDatabase = firebase.database().ref('text');Introducción a Firebase
Para obtener el valor podemos suscribirnos al evento "value" de dos maneras; hacer una única petición, o dejando el socket abierto para poder escuchar los cambios)
Lectura
Introducción a Firebase
Obtener los datos una única vez (método once)
Suscribirnos a cualquier cambio que se produzca en dicho nodo (método on)
jsVigoDatabase.on('value', function(snapshot) {
document.getElementsByTagName('h1')[0].innerHTML = snapshot.val();
}, function(err){
console.error(err);
}); jsVigoDatabase.once('value', function(snapshot) {
document.getElementsByTagName('h1')[0].innerHTML = snapshot.val();
}, function(err){
console.error(err);
});Lectura
Introducción a Firebase
Lectura
jsVigoDatabase.ref('Info').on('value', function(snapshot) {
var _info = snapshot.val();
document.getElementById('Nombre').value = _info.Nombre;
document.getElementById('Apellidos').value = _info.Apellidos;
document.getElementById('Profesion').value = _info.Profesion;
}, function(err){
console.error(err);
}); Introducción a Firebase
Lectura
Si hemos utilizado el método "on" (Ejecutar una función cada vez que se produzca un cambio) y queremos dejar de escuchar dichos cambios, podemos usar el método "off" (Siempre sobre la misma referencia)
var jsVigoDatabase = firebase.database().ref('text');
jsVigoDatabase.on('value', callback );
jsVigoDatabase.off('value');Introducción a Firebase
Escritura - set
Al trabajar con JSON, podemos definir un JSON como value de un nodo, o directamente el valor "normal"
var infoObj = {},
_nombre = document.getElementById('nombreSet').value,
_apellidos = document.getElementById('apellidosSet').value,
_profesion = document.getElementById('profesionSet').value;
if ( !!_nombre ){
infoObj.Nombre = _nombre;
}
if ( !!_apellidos ){
infoObj.Apellidos = _apellidos;
}
if ( !!_profesion ){
infoObj.Profesion = _profesion;
}
jsVigoDatabase.ref('Info').set(infoObj);Introducción a Firebase
Escritura - set
var _name = document.getElementById('nombrePartial').value;
jsVigoDatabase.ref('Info').child('Nombre').set(_name);var _name = document.getElementById('nombrePartial').value;
jsVigoDatabase.ref('Info/Nombre').set(_name);Maneras de acceder a una referencia, y actualizar su valor:
Introducción a Firebase
Escritura - push
var _friend = {},
result = '';
_friend.nombre = document.getElementById('nombrePush').value;
_friend.apellidos = document.getElementById('apellidosPush').value;
result = jsVigoDatabase.ref('Friends').push(_friend);Introducción a Firebase
Eventos
Cada cambio (creación, eliminación, actualización) en un nodo dispara un evento al que podemos suscribirnos
jsVigoDatabase.ref('Friends').on('child_added', function(snapshot){
_addFriendToView(snapshot.val(),snapshot.key);
});
jsVigoDatabase.ref('Friends').on('child_removed', function(snapshot){
_removeFriendToView(snapshot.key);
});Introducción a Firebase
Eventos
En el evento child_changed recibimos cualquier actualización; ya sea la creación de un subnodo, cambio de un valor, o eliminación de un nodo
Nos envía un objeto "snapshot", que contiene el valor actual del nodo al que nos hemos suscrito, y su key.
jsVigoDatabase.ref('Friends').on('child_changed', function(snapshot){
var myText = 'El nodo con key: ' + snapshot.key
+ ' ahora tiene el valor: ' + JSON.stringify(snapshot.val()) );
console.log(myText);
});Query
El filtrado lo utilizaremos cuando el valor de un nodo sea un array
Query
Para realizar filtrados debemos usar los métodos:
Estos métodos tienen que ejecutarse siempre sobre una "reference" (nodo)
Query
//Los registros hijos dentro del nodo random filtrados por el campo "integerFilter"
//y que su valor es exactamente 7
jsVigoDatabase.ref('random/').orderByChild('integerFilter').equalTo(7);
//y que su valor es menor o igual a 7
jsVigoDatabase.ref('random/').orderByChild('integerFilter').endAt(7);
//y que su valor es mayor o igual a 7
jsVigoDatabase.ref('random/').orderByChild('integerFilter').startAt(7);//Los registros hijos dentro del nodo random filtrados por el campo "stringFilter"
//y que su valor es exactamente 'hola'
//En búsquedas por textos, no se permite utilizar los métodos startAt ni endAt
jsVigoDatabase.ref('random/').orderByChild('stringFilter').equalTo('hola');Introducción a Firebase
Como en cualquier base de datos, podremos utilizar índices
Cuando Firebase considera oportuno crear un índice, nos lo avisa por la consola.
Suelen ser los campos por los que hemos hecho un orderByChild y tiene muchos elementos
Introducción a Firebase
Resultado - number
Introducción a Firebase
Resultado - text
Introducción a Firebase
¿Cómo creo un índice sencillo?
Introducción a Firebase
Los índices también pueden ser por los valores de un nodo tal que así:
Introducción a Firebase
¿Y si tenemos que generar un índice que dependa de un key generado por firebase?
Supongamos que "integerFilter" tiene otro nodo algo más complejo dentro y que necesitamos indexarlo
"rules": {
"random": {
"$groupid": {
".indexOn": "integerFilter"
}
}
}Introducción a Firebase
Los permisos se gestionan en la misma sección del panel de control que los índices
Los permisos sólo son de escritura y de lectura
Introducción a Firebase
Tenemos estos usuarios creados en el panel de control. El UID del usuario es el key del usuario
Introducción a Firebase
Supongamos que los datos de cada usuario sólo los puede editar dicho usuario y que dichos datos los tenemos guardados de esta manera:
Los campos email y nombre no tienen que ver con los datos creados en la pestaña "authentication".
Introducción a Firebase
Queremos que cualquier usuario pueda leer el nodo de otro usuario y que el usuario que se ha autenticado pueda modificar su información
Y ya de paso vemos cómo añadir un índice por el campo email
Introducción a Firebase
Para poder restringir la lectura y escritura, no puede existir el siguiente nodo:
De existir dicho nodo, siempre que estemos logueados, se podrá leer y escribir.
Introducción a Firebase
"Firebase Storage ofrece la posibilidad de subir y descargar archivos de forma segura para tus apps de Firebase, independientemente de la calidad de la red. Puedes usarlo para almacenar imágenes, audio, video y otro contenido generado por el usuario. Firebase Storage está respaldado por Google Cloud Storage, un servicio potente, simple y rentable de almacenamiento de objetos."
Introducción a Firebase
Al igual que toda la base de datos, el acceso a los ficheros alojados en firebase, puede ser securizado.
Introducción a Firebase
Esta es la última novedad que ha incorporado google y aún está en Beta (Abril 2017)
Introducción a Firebase
Firebase nos ofrece un SDK para poder trabajar más cómodamente, no obstante podemos usarlo con llamadas HTTP y haciendo uso de los verbos HTTP
Introducción a Firebase
¡NO!
Introducción a Firebase
Aunque nos ofrezca un servicio a modo de API, debemos tener en cuenta que sólo deberíamos usarlo para aplicaciones CRUD
Introducción a Firebase
Número de campos a la hora de realizar la consulta
Ahora mismo sólo permite filtrar por uno. No obstante, está incluido en el roadmap de Firebase que vayan a incluir mejorar este punto.
Introducción a Firebase
Al hacer búsquedas por textos no permite filtrar por "contiene" ( like '%value%' )
Introducción a Firebase
Cuando trabajamos desde un nodo que contiene muchos datos, nos muestra este mensaje.
Haciendo click en un nodo concreto, podremos abrir sólo dicho nodo, y si no contiene muchos datos, volver a editarlo. Sino, siempre se puede abrir el nodo exacto donde queremos hacer la edición desde el navegador
Introducción a Firebase
Paginación
A día de hoy no se pueden pedir datos paginados. Puedes pedir los n primeros registros, o los n últimos, pero no se pueden combinar.
Si necesitamos obtener una cantidad enorme de datos, nos ofrecen la posibilidad de usar el parámetro "shallow" si usamos el API REST, pero tiene más limitaciones.