Node js for Mobile App

Post on 04-Jul-2015

502 views 2 download

Transcript of Node js for Mobile App

NodeJS for Mobile Apps

Habib MAALEM

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

Habib MAALEMDéveloppeur Front End @AllégorieTV

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

NodeJS ??

C’est quoi NodeJS

Que fait NodeJS

Pourquoi NodeJS

Cas d’utilisation

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

Que fait NodeJS ?

1. NodeJS est un serveur2. Programmation non bloquante

(Callbacks)3. Programmation Événementiel

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

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

Programmation Événementiel *

Node est basé sur un modèle d’événement.

Tout est basé sur des messages

“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

“single-thread event loop”

“single-thread event loop”

“single-thread event loop”

Les Modules

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

Les Modules

1. Don't Repeat Yourself2. Don't Reinvent the Wheel3. Learn 2 Search

‘npm install -g grunt’

Node Packaged Modules

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

Qui utilisent NodeJS

LinkedIn

eBay

Walmart

RESTful API ?

REST: Representational State TransferAPI: Application Programming Interface

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

RESTful API ?

Méthode HTTP Étape CRUD

POST Create

GET Read

PUT Update

DELETE Delete

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...');

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

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).

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

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 »

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

SDK : Kit de développement

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) {...}

}

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.

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

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

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

});}

));

Merci

Questions