node js for mobile app

37
NodeJS for Mobile Apps Habib MAALEM

Upload: habibmaalem

Post on 04-Jul-2015

518 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Node js for Mobile App

NodeJS for Mobile Apps

Habib MAALEM

Page 2: Node js for Mobile App

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

Habib MAALEMDéveloppeur Front End @AllégorieTV

LinkedIndz.linkedin.com/in/habibmaalemTwittertwitter.com/HabibMAALEM

Page 4: Node js for Mobile App

NodeJS ??

C’est quoi NodeJS

Que fait NodeJS

Pourquoi NodeJS

Cas d’utilisation

Page 5: Node js for Mobile App

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

Que fait NodeJS ?

1. NodeJS est un serveur2. Programmation non bloquante

(Callbacks)3. Programmation Événementiel

Page 7: Node js for Mobile App

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

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

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

“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

“single-thread event loop”

Page 12: Node js for Mobile App

“single-thread event loop”

Page 13: Node js for Mobile App

“single-thread event loop”

Page 14: Node js for Mobile App
Page 15: Node js for Mobile App

Les Modules

1. NPM: Node Packaged Module2. Plus de 62 000 modules3. Une installation simple et facile

Page 16: Node js for Mobile App

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

Node Packaged Modules

Page 18: Node js for Mobile App

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

Qui utilisent NodeJS

LinkedIn

eBay

Walmart

Page 20: Node js for Mobile App

RESTful API ?

REST: Representational State TransferAPI: Application Programming Interface

‘GET’ ‘PUT’ ‘POST’ ‘DELETE’

Page 21: Node js for Mobile App

RESTful API ?

Méthode HTTP Étape CRUD

POST Create

GET Read

PUT Update

DELETE Delete

Page 22: Node js for Mobile App

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

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

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

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

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

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

SDK : Kit de développement

Page 29: Node js for Mobile App

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

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
Page 32: Node js for Mobile App

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
Page 34: Node js for Mobile App

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

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

Merci

Page 37: Node js for Mobile App

Questions