Firebase
Firebase
Firebase
1
Les attentes utilisateur
● Fonctionnement
● Vitesse
2
Les attentes développeur
● Efficacité
● Sécurité
● Facilité
3
Les promesses
5
Stockage des données
● NoSQL
● Utilise JSON
● Chaque ressource a une URL
o API REST
● Local storage
● Références / DataSnapshot
o Objet contenant les données de Firebase
6
Firebase API (Web)
Références Firebase
● new Firebase(url)
var firebaseUrl = "https://torrid-torch-
2690.firebaseio.com/addressbook";
var firebase = new Firebase(firebaseUrl);
Navigation
● child(path)
firebase.child("new");
● parent()
7
Firebase API (Web)
Persistance
● push(object)
o Génération automatique de clés
firebase.push({ firstname: "prenom", lastname: "nom", email: "mail" });
● set(object)
firebase.set({ TEST: "TEST" });
● update(object)
firebase.child(key).update({firstname: "Françoise"});
● remove()
firebase.child(key).remove();
8
Firebase API (Web)
Méthodes DataSnapshot
● key()
o Récupère la clé
● val()
o Récupère l’objet JavaScript
● child(path)
o Récupère l’objet
DataSnapshot
9
Synchronisation de données
● child_added
10
Synchronisation de données
● child_added
firebase.limitToLast(10).on('child_added', function (snapshot) {
addAddressOnView(snapshot.key(), snapshot.val());
});
11
Synchronisation de données
Autres évènements possibles:
● child_changed
● value
● child_removed
● child_moved
12
Synchronisation de données
● Synchronisation clients-serveur Firebase
● Communication full-duplex
o Utilisation websocket
13
Websocket
● Protocole réseau RFC 6455
● Canal de communication full-duplex
● Utilisation TCP
● Handshake
o Une requête HTTP: option upgrade
o Connexion client-serveur
14
Requêtes
● Ordre
o by child, by key, by value
o by priority
● Limit
o to first, to last
● Range
o Start at, End at (inclusive)
15
Requêtes
● Équivalent au WHERE
o Pour l’ID
Par adresse / child
o Pour la valeur …
startAt(“---”).endAt(“---”).once()
16
Et les jointures ?
● Vous pouvez les faire … vous même
17
Accès concurrent
● “J’aime”, Nombre de vues ....
● Problème d’accès concurrent
● Solution : fournir une fonction
18
Et si j’ai pas internet ?
● Firebase locale
● Best-effort
19
Multiplateforme
20
Différences
Mise en place
● <script
src="https://cdn.firebase.com/js/client/2.2.3/firebase.js"></script>
● var db = new Firebase('https://sharedpad.firebaseio.com');
● compile 'com.firebase:firebase-client-android:2.2.3+'
● <uses-permission android:name="android.permission.INTERNET" />
● Firebase.setAndroidContext(this);
● Firebase firebase = new
Firebase("https://sharedpad.firebaseio.com/");
22
Exemple
● Application “sharedpad”
o google play store
o Visualisation:
https://sharedpad.firebaseapp.com/
o Une seule entrée dans la base
o Rafraîchissement de tout le pad à chaque
changement de caractère
Test de vitesse
23
Compatible
2
4
Exemple de BackboneFire
25
Coté serveur
● Basé sur l’API REST
● Utilisation de librairies
26
Exemple coté serveur
● Java : Firebase4j alpha
o Firebase db = new Firebase(“adresse”);
o db.put/post(Hashmap)
o db.get()
● PHP : firebase-php
o $fb = new Firebase(url, token);
o $fb-> set / get / update / push / delete
27
Sécurité
● Authentification
● Permissions
● Validation des données
28
Authentification
29
Authentification
● Simple
● Anonyme
30
Authentification
31
Authenfication
● Via autres API
● Personnalisé
32
Permissions
● Règles de sécurité
o Gestion des accès lecture/écriture
33
Permissions
34
Validation des données
● Règles de sécurité
o Contraintes
o Données cohérentes
● Pas en cascade
35
Construction de règles
36
Conclusion/résumé
● “Sharedpad”
37
Sharedpad, partie lecture
38
SharedPad, partie écriture
39
Recherches
● Pas de LIKE
● Utilisation de elasticSearch avec node-
elasticsearch-client
o installation de l’API
o indexer les données
o envoyer la requête avec elasticSearch
o ecouter la réponse sur mafb.firebase.io/serach
40
Hosting
● Uniquement coté client
● CDN “global”
42
Pour aller plus loin ...
● Applications sans côté serveur
43
Ressources
Firebase:
● https://www.firebase.com/docs/
RFC6455:
● https://tools.ietf.org/html/rfc6455#page-6
WebSocket:
● http://liris.cnrs.fr/~lmedini/enseignement/MIF38/CM/CM/CM_WebSockets.html
● http://www.jmdoudoux.fr/java/dej/chap-websockets.htm
Requêtes “complexes”
● https://www.firebase.com/blog/2013-10-01-queries-part-one.html
44