SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
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 MAALEM
Développeur Front End @AllégorieTV
LinkedIn
dz.linkedin.com/in/habibmaalem
Twitter
twitter.com/HabibMAALEM
NodeJS ??
C’est quoi NodeJS
Que fait NodeJS
Pourquoi NodeJS
Cas d’utilisation
NodeJS est ...
1. Projet open source
2. Créé le 19 février 2009 par
Ryan Dahl
3. Ecrit en C/C++
4. Basé sur le Moteur Javascript
V8
Github: https://github.
com/joyent/node
Que fait NodeJS ?
1. NodeJS est un serveur
2. 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 Worldn');
}).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 Module
2. Plus de 62 000 modules
3. Une installation simple et facile
Les Modules
1. Don't Repeat Yourself
2. Don't Reinvent the Wheel
3. 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ée
7. Réseaux sociaux
8. Outils de traduction en temps réel
9. API
Qui utilisent NodeJS
LinkedIn
eBay
Walmart
RESTful API ?
REST: Representational State Transfer
API: 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 SDK
2. Fouir l’optionnel et le paramétrable, rendre obligatoire est
explicite
3. Aucune informations essentiels dans les entêtes
4. Paramètres génériques, valable sur toute l’API
5. Numéroter les erreurs avec un identifiant unique à tous vos
projets
6. Penser au cache
7. 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 web
2. Password pour un accès avec
Username/Password
3. Client credentials pour application
4. Implicit pour les application mobile et les
application basé navigateur
Le protocole OAuth
npm install oauth2orize
npm install passport
// create OAuth 2.0 server
var https = require('https');
var server = oauth2orize.createServer();
Implémenter les étape du protocole OAuth
server.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

Weitere ähnliche Inhalte

Was ist angesagt?

Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Amélie DUVERNET
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIHugo Hamon
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielleDavid Buros
 
5- [ASP.NET Core] Devops : VSTS, Git, Azure, Docker, Linux
5- [ASP.NET Core] Devops : VSTS, Git, Azure, Docker, Linux5- [ASP.NET Core] Devops : VSTS, Git, Azure, Docker, Linux
5- [ASP.NET Core] Devops : VSTS, Git, Azure, Docker, LinuxYasmine Amrani
 
01 - [ASP.NET Core] Plénière
01 - [ASP.NET Core] Plénière 01 - [ASP.NET Core] Plénière
01 - [ASP.NET Core] Plénière Cellenza
 
SonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
SonarQube Manuel Automatisation d'analyse ANT JENKINS/HudsonSonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
SonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudsonxmacina
 
What's Next Replay - IC / Jenkins
What's Next Replay - IC / JenkinsWhat's Next Replay - IC / Jenkins
What's Next Replay - IC / JenkinsZenikaOuest
 
Jenkins - perdre du temps pour en gagner
Jenkins - perdre du temps pour en gagnerJenkins - perdre du temps pour en gagner
Jenkins - perdre du temps pour en gagnerGeeks Anonymes
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
Bbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic searchBbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic searchIdriss Neumann
 
03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA 03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA Cellenza
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+ekino
 
Laravel yet another framework
Laravel  yet another frameworkLaravel  yet another framework
Laravel yet another frameworkLAHAXE Arnaud
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924Gregory Boissinot
 
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Cédric Leblond
 
Angular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUGAngular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUGWilliam Marques
 
PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...Romain Cambien
 

Was ist angesagt? (20)

Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CI
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielle
 
5- [ASP.NET Core] Devops : VSTS, Git, Azure, Docker, Linux
5- [ASP.NET Core] Devops : VSTS, Git, Azure, Docker, Linux5- [ASP.NET Core] Devops : VSTS, Git, Azure, Docker, Linux
5- [ASP.NET Core] Devops : VSTS, Git, Azure, Docker, Linux
 
Jenkins Workflow
Jenkins WorkflowJenkins Workflow
Jenkins Workflow
 
01 - [ASP.NET Core] Plénière
01 - [ASP.NET Core] Plénière 01 - [ASP.NET Core] Plénière
01 - [ASP.NET Core] Plénière
 
SonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
SonarQube Manuel Automatisation d'analyse ANT JENKINS/HudsonSonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
SonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
 
What's Next Replay - IC / Jenkins
What's Next Replay - IC / JenkinsWhat's Next Replay - IC / Jenkins
What's Next Replay - IC / Jenkins
 
Jenkins - perdre du temps pour en gagner
Jenkins - perdre du temps pour en gagnerJenkins - perdre du temps pour en gagner
Jenkins - perdre du temps pour en gagner
 
Angular 2
Angular 2Angular 2
Angular 2
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Bbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic searchBbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic search
 
03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA 03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
Laravel yet another framework
Laravel  yet another frameworkLaravel  yet another framework
Laravel yet another framework
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924
 
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
 
Angular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUGAngular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUG
 
JENKINS_BreizhJUG_20111003
JENKINS_BreizhJUG_20111003JENKINS_BreizhJUG_20111003
JENKINS_BreizhJUG_20111003
 
PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...
 

Andere mochten auch

Quand utiliser MongoDB … Et quand vous en passer…
Quand utiliser MongoDB	… Et quand vous en passer…Quand utiliser MongoDB	… Et quand vous en passer…
Quand utiliser MongoDB … Et quand vous en passer…MongoDB
 
JavaScript code academy - introduction
JavaScript code academy - introductionJavaScript code academy - introduction
JavaScript code academy - introductionJaroslav Kubíček
 
Node.js et MongoDB: Mongoose
Node.js et MongoDB: MongooseNode.js et MongoDB: Mongoose
Node.js et MongoDB: Mongoosejeromegn
 
Gérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerGérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerJulien Dubois
 
HTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilitéHTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilitéJulien Dubois
 
Industrialisation Front-end - introduction
Industrialisation Front-end - introductionIndustrialisation Front-end - introduction
Industrialisation Front-end - introductionhalleck45
 

Andere mochten auch (8)

Node.js
Node.jsNode.js
Node.js
 
Quand utiliser MongoDB … Et quand vous en passer…
Quand utiliser MongoDB	… Et quand vous en passer…Quand utiliser MongoDB	… Et quand vous en passer…
Quand utiliser MongoDB … Et quand vous en passer…
 
JavaScript code academy - introduction
JavaScript code academy - introductionJavaScript code academy - introduction
JavaScript code academy - introduction
 
Node.js et MongoDB: Mongoose
Node.js et MongoDB: MongooseNode.js et MongoDB: Mongoose
Node.js et MongoDB: Mongoose
 
Gérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerGérer son environnement de développement avec Docker
Gérer son environnement de développement avec Docker
 
De Devoxx au CAC40
De Devoxx au CAC40De Devoxx au CAC40
De Devoxx au CAC40
 
HTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilitéHTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilité
 
Industrialisation Front-end - introduction
Industrialisation Front-end - introductionIndustrialisation Front-end - introduction
Industrialisation Front-end - introduction
 

Ähnlich wie NodeJS for Mobile App

#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniterAtsé François-Xavier KOBON
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)Rui Carvalho
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)Restlet
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web servicesLilia Sfaxi
 
Architecturez vos applications mobiles avec Azure et Xamarin
Architecturez vos applications mobiles avec Azure et XamarinArchitecturez vos applications mobiles avec Azure et Xamarin
Architecturez vos applications mobiles avec Azure et XamarinThierry Buisson
 
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Jean-Laurent de Morlhon
 
Mettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMatthieu Guillermin
 
cours Android.pptx
cours Android.pptxcours Android.pptx
cours Android.pptxYaminaGh1
 
[FR] C'est quoi une API ?
[FR] C'est quoi une API ?[FR] C'est quoi une API ?
[FR] C'est quoi une API ?OVHcloud
 
eServices-Tp2: bpel
eServices-Tp2: bpeleServices-Tp2: bpel
eServices-Tp2: bpelLilia Sfaxi
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web servicesLilia Sfaxi
 
Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Cédric Leblond
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EESabri Bouchlema
 
Initiation au développement mobile sous Android
Initiation au développement mobile sous AndroidInitiation au développement mobile sous Android
Initiation au développement mobile sous AndroidAbdelkader Rhouati
 
Partie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptxPartie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptxHamzaElgari
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: AngularHabib Ayad
 
Paris ember js lab #6 - Taking over server-side rendering websites
Paris ember js lab #6 - Taking over server-side rendering websitesParis ember js lab #6 - Taking over server-side rendering websites
Paris ember js lab #6 - Taking over server-side rendering websitesGuillaume Gérard
 

Ähnlich wie NodeJS for Mobile App (20)

#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
Architecturez vos applications mobiles avec Azure et Xamarin
Architecturez vos applications mobiles avec Azure et XamarinArchitecturez vos applications mobiles avec Azure et Xamarin
Architecturez vos applications mobiles avec Azure et Xamarin
 
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
 
Mettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JS
 
cours Android.pptx
cours Android.pptxcours Android.pptx
cours Android.pptx
 
Support Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFISupport Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFI
 
[FR] C'est quoi une API ?
[FR] C'est quoi une API ?[FR] C'est quoi une API ?
[FR] C'est quoi une API ?
 
eServices-Tp2: bpel
eServices-Tp2: bpeleServices-Tp2: bpel
eServices-Tp2: bpel
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web services
 
Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EE
 
Ter Web Service Intro
Ter Web Service IntroTer Web Service Intro
Ter Web Service Intro
 
Initiation au développement mobile sous Android
Initiation au développement mobile sous AndroidInitiation au développement mobile sous Android
Initiation au développement mobile sous Android
 
Partie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptxPartie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptx
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: Angular
 
Paris ember js lab #6 - Taking over server-side rendering websites
Paris ember js lab #6 - Taking over server-side rendering websitesParis ember js lab #6 - Taking over server-side rendering websites
Paris ember js lab #6 - Taking over server-side rendering websites
 

Kürzlich hochgeladen

SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxssuserbd075f
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxRayane619450
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 

Kürzlich hochgeladen (10)

SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 

NodeJS for Mobile App

  • 2. 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
  • 3. Habib MAALEM Développeur Front End @AllégorieTV LinkedIn dz.linkedin.com/in/habibmaalem Twitter twitter.com/HabibMAALEM
  • 4. NodeJS ?? C’est quoi NodeJS Que fait NodeJS Pourquoi NodeJS Cas d’utilisation
  • 5. NodeJS est ... 1. Projet open source 2. Créé le 19 février 2009 par Ryan Dahl 3. Ecrit en C/C++ 4. Basé sur le Moteur Javascript V8 Github: https://github. com/joyent/node
  • 6. Que fait NodeJS ? 1. NodeJS est un serveur 2. Programmation non bloquante (Callbacks) 3. Programmation Événementiel
  • 7. Un serveur var https = require('https'); https.createServer(function (req, res) { res.writeHead(200, {'Content-Type':'text/plain'}); res.end('Hello Worldn'); }).listen(3000, '127.0.0.1'); console.log('Server running at http://127.0.0.1:3000/');
  • 8. 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
  • 9. Programmation Événementiel * Node est basé sur un modèle d’ événement. Tout est basé sur des messages
  • 10. “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
  • 14.
  • 15. Les Modules 1. NPM: Node Packaged Module 2. Plus de 62 000 modules 3. Une installation simple et facile
  • 16. Les Modules 1. Don't Repeat Yourself 2. Don't Reinvent the Wheel 3. Learn 2 Search ‘npm install -g grunt’
  • 18. 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ée 7. Réseaux sociaux 8. Outils de traduction en temps réel 9. API
  • 20. RESTful API ? REST: Representational State Transfer API: Application Programming Interface ‘GET’ ‘PUT’ ‘POST’ ‘DELETE’
  • 21. RESTful API ? Méthode HTTP Étape CRUD POST Create GET Read PUT Update DELETE Delete
  • 22. 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...');
  • 23. 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
  • 24. 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).
  • 25. 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
  • 26. 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 »
  • 27. Bonnes pratiques 1. Fournir un SDK 2. Fouir l’optionnel et le paramétrable, rendre obligatoire est explicite 3. Aucune informations essentiels dans les entêtes 4. Paramètres génériques, valable sur toute l’API 5. Numéroter les erreurs avec un identifiant unique à tous vos projets 6. Penser au cache 7. Utiliser un sous domaine distinct pour l’API
  • 28. SDK : Kit de développement
  • 29. 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) {...} }
  • 30. 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.
  • 31.
  • 32. Le protocole OAuth OAuth 2 fournit plusieurs type d’accès 1. Authorization Code pour les application web 2. Password pour un accès avec Username/Password 3. Client credentials pour application 4. Implicit pour les application mobile et les application basé navigateur
  • 33.
  • 34. Le protocole OAuth npm install oauth2orize npm install passport // create OAuth 2.0 server var https = require('https'); var server = oauth2orize.createServer(); Implémenter les étape du protocole OAuth server.serializeClient(...); server.deserializeClient(...); server.grant(...); server.exchange(...);
  • 35. 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); }); } ));
  • 36. Merci