Firebase

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 44

Audréa Malialin, Juliana Leclaire, Maxime Guyaux

1
Les attentes utilisateur
● Fonctionnement

● Vitesse

2
Les attentes développeur
● Efficacité

● Sécurité

● Facilité

3
Les promesses

● Mise en place rapide


● Facile d’utilisation
● “Temps réel”
● Sécurité
● Faire travailler le client
4
Firebase

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());
});

function addAddress(firstname, lastname, email) {


if(firstname !== "" && lastname != "" && email != "") {
firebase.push({ firstname: firstname, lastname: lastname, email:
email });
}
}

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/");

● Telecharger la SDK : avec CocoaPods : pod ‘Firebase’, ‘>= 2.2.0’


● Ajouter au projet : libicucore.dylib, libc++.dylib, CFNetwork.framwork, Security.framwork,
SystemConfiguration.framework
● Ajouter dans build settings dans “other linker flag” : -ObjC
● #import <Firebase/Firebase.h>
● Firebase *myBase = [[Firebase alloc] initWithUrl @https://sharedpad.firebaseio.com/"];
21
Différences
Écriture / Lecture

● set(), update(), push()


● db.on(“event”, action)

● set(), update(), push()


● db.addChildEventListener(new ChildEventListener() {
○ on event …

● [db setValue/updateChildValues/childByAutoId value];


● [db observeEventTYpe:FEventTypeValue
withBlack:^(FDataSnapshot *snapchot) ...action… }];

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

● Puis utilisation des événements du modèle

25
Coté serveur
● Basé sur l’API REST

● PHP, Python, Java, Perl, Ruby …

● 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

● Gestion des règles en cascade

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

.read Les variables:


now
.write root
data
.validate newData
auth
$<maVariable>

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”

npm install -g firebase-


tools
firebase init
firebase deploy
41
La concurrence

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

Vous aimerez peut-être aussi