Node js for Mobile App
-
Upload
habibmaalem -
Category
Education
-
view
519 -
download
2
Transcript of Node js for Mobile App
![Page 1: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/1.jpg)
NodeJS for Mobile Apps
Habib MAALEM
![Page 2: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/2.jpg)
Sommaire
1. C’est quoi NodeJS ?
2. Que fait NodeJS ?
3. Pourquoi NodeJS ?
4. Modules
5. Cas d’utilisation
6. Restful API
7. CRUD
8. SDK
9. Le protocole OAuth
![Page 3: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/3.jpg)
Habib MAALEMDéveloppeur Front End @AllégorieTV
LinkedIndz.linkedin.com/in/habibmaalemTwittertwitter.com/HabibMAALEM
![Page 4: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/4.jpg)
NodeJS ??
C’est quoi NodeJS
Que fait NodeJS
Pourquoi NodeJS
Cas d’utilisation
![Page 5: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/5.jpg)
NodeJS est ...1. Projet open source2. Créé le 19 février 2009 par
Ryan Dahl3. Ecrit en C/C++4. Basé sur le Moteur Javascript
V8
Github: https://github.com/joyent/node
![Page 6: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/6.jpg)
Que fait NodeJS ?
1. NodeJS est un serveur2. Programmation non bloquante
(Callbacks)3. Programmation Événementiel
![Page 7: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/7.jpg)
Un serveur
var https = require('https');
https.createServer(function (req, res) {
res.writeHead(200, {'Content-Type':'text/plain'});
res.end('Hello World\n');
}).listen(3000, '127.0.0.1');
console.log('Server running at http://127.0.0.1:3000/');
![Page 8: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/8.jpg)
Programmation non bloquante// Bloquant
var fichierA = lireFichier(’FichierA.txt’);
console.log(’Fichier A’);
var fichierB = lireFichier(’FichierB.txt’);
console.log(’Fichier B’);
----------------------------------------------------------------------------------
// Non Bloquant
var fichierA = lireFichier(’FichierA.txt’);
console.log(’Fichier A’);
var fichierB = lireFichier(’FichierB.txt’);
console.log(’Fichier B’);
Fichier A, Fichier B
Fichier B, Fichier A
![Page 9: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/9.jpg)
Programmation Événementiel *
Node est basé sur un modèle d’événement.
Tout est basé sur des messages
![Page 10: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/10.jpg)
“single-thread event loop”
Analogie du roi
Le roi ordonne à ses messagers, qui reviennent dès qu'ils le peuvent, et le roi traite les réponses au fur et à mesure, une à la fois.
Pas pratiques pour les tâches lourdes
![Page 11: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/11.jpg)
“single-thread event loop”
![Page 12: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/12.jpg)
“single-thread event loop”
![Page 13: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/13.jpg)
“single-thread event loop”
![Page 14: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/14.jpg)
![Page 15: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/15.jpg)
Les Modules
1. NPM: Node Packaged Module2. Plus de 62 000 modules3. Une installation simple et facile
![Page 16: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/16.jpg)
Les Modules
1. Don't Repeat Yourself2. Don't Reinvent the Wheel3. Learn 2 Search
‘npm install -g grunt’
![Page 17: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/17.jpg)
Node Packaged Modules
![Page 18: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/18.jpg)
Cas d’utilisation NodeJS
1. Applications Web.2. Applications CLI.3. Applications Réseaux.4. Jeux en ligne.5. Outils de collaboration.6. Messagerie instantanée7. Réseaux sociaux8. Outils de traduction en temps réel9. API
![Page 19: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/19.jpg)
Qui utilisent NodeJS
eBay
Walmart
![Page 20: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/20.jpg)
RESTful API ?
REST: Representational State TransferAPI: Application Programming Interface
‘GET’ ‘PUT’ ‘POST’ ‘DELETE’
![Page 21: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/21.jpg)
RESTful API ?
Méthode HTTP Étape CRUD
POST Create
GET Read
PUT Update
DELETE Delete
![Page 22: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/22.jpg)
RESTful API ?
var express = require('express');
var app = express();
app.get('/annonces', function(req, res) {
res.send([{name: 'annonce1'}, {name: ’annonce2’}]);
});
app.get('/annonces/:id', function(req, res) {
res.send({
id:req.params.id, name: ‘Titre’,
description: ‘Description’});
});
app.listen(3000);
console.log('Listening on port 3000...');
![Page 23: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/23.jpg)
RESTful API ?
Méthode HTTP /annonces/ /annonces/:id
POST Ajout d’une annonce -----
GET Liste des annonces Détail d’une annonce
PUT ----- Modification d’une annonce
DELETE ----- Suppression d’une annonce
![Page 24: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/24.jpg)
RESTful API ?
La notion de service RESTful est très normée, et quelques règles doivent être respectées pour se réclamer RESTful:
1. Le service permet de manipuler une collection d’entités.2. Les méthodes POST/GET/PUT/DELETE sont implémentées pour
manipuler la collection et/ou les entités, sur le modèle du CRUD.3. Les méthodes PUT et DELETE sont « idempotentes », ce qui
signifie qu’effectuer plusieurs fois la même requête aura le même effet que de l’exécuter une seule fois.
4. La méthode GET est « sûre », ce qui signifie qu’elle ne modifie pas l’état du serveur ni les données (à l’inverse de POST/PUT/DELETE).
![Page 25: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/25.jpg)
Utiliser les bons codes de statut HTTP
Code Message Description
200 OK Le code de statut par défaut en cas de succès. Il sera en général accompagné d’un corps de réponse en JSON
400 Bad request Le code d’erreur générique dans le cas d’informations invalides fournis au service dans la requête (format de données invalide par exemple
404 Not Found Code d’erreur typiquement retourné dans le cas d’une URI d’entité (en PUT ou GET) qui n’existe pas
405 Method Not Allowed
Retourné lorsque l’utilisateur effectue un appel à une URL ne supportant pas la méthode demandée
![Page 26: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/26.jpg)
Utiliser les bons codes de statut HTTP
Code Message Description
406 Not Acceptable
Ce code sera retourné lorsque la requête contient des entêtes qui nous semblent incompatibles avec le fonctionnement du service, par exemple si dans l’entête « Accept » on ne trouve pas « application/json », ça signifie que la requête déclare explicitement ne pas accepter ce format, et on n’est donc pas en mesure de communiquer avec ce client
500 Server Error Ce sera le code d’erreur par défaut, celui qu’on ne souhaite jamais retourner car il s’agit d’une erreur « non traitée »
![Page 27: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/27.jpg)
Bonnes pratiques
1. Fournir un SDK2. Fouir l’optionnel et le paramétrable, rendre obligatoire est
explicite3. Aucune informations essentiels dans les entêtes4. Paramètres génériques, valable sur toute l’API5. Numéroter les erreurs avec un identifiant unique à tous vos
projets6. Penser au cache7. Utiliser un sous domaine distinct pour l’API
![Page 28: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/28.jpg)
SDK : Kit de développement
![Page 29: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/29.jpg)
Software Development Kit// Une simple interface de consommation en JAVA
public class SehhaAPI {
public String getAuthorizationUrl() {...}
public boolean authorizeAndAcquireTokens(String code) {...}
private void refreshToken() throws Exception {...}
private boolean getNewAccessToken(boolean refreshing) {...}
private String sehhaRequest(String requestURL) {...}
}
![Page 30: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/30.jpg)
Le protocole OAuth
OAuth permet aux utilisateurs de donner, à un site/application « consommateur », l'accès à des informations personnelles provenant d'un site/application « fournisseur » de service ou de données. ceci tout en protégeant le pseudonyme et le mot de passe des utilisateurs.
![Page 31: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/31.jpg)
![Page 32: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/32.jpg)
Le protocole OAuth
OAuth 2 fournit plusieurs type d’accès
1. Authorization Code pour les application web2. Password pour un accès avec
Username/Password3. Client credentials pour application4. Implicit pour les application mobile et les
application basé navigateur
![Page 33: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/33.jpg)
![Page 34: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/34.jpg)
Le protocole OAuth
npm install oauth2orizenpm install passport
// create OAuth 2.0 servervar https = require('https');var server = oauth2orize.createServer();
Implémenter les étape du protocole OAuthserver.serializeClient(...);server.deserializeClient(...);server.grant(...);server.exchange(...);
![Page 35: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/35.jpg)
Le protocole OAuth
var BasicStrategy = require('passport-http').BasicStrategy;var ClientPasswordStrategy = require('passport-oauth2-client-password').Strategy;passport.use(new ClientPasswordStrategy(
function(clientId, clientSecret, done) {clients.findByClientId(clientId, function(err, client) {
if (err) { return done(err); }if (!client) { return done(null, false); }if (client.clientSecret != clientSecret) { return done(null, false); }return done(null, client);
});}
));
![Page 36: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/36.jpg)
Merci
![Page 37: Node js for Mobile App](https://reader030.fdocuments.net/reader030/viewer/2022013108/55975b191a28ab480e8b4590/html5/thumbnails/37.jpg)
Questions