SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielle
David Buros
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924
Gregory Boissinot
 

Tendances (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+
 
[2015] Laravel yet another framework
[2015] Laravel  yet another framework[2015] Laravel  yet another framework
[2015] 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 ...
 

En vedette (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
 

Similaire à 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 CodeIgniter
Atsé François-Xavier KOBON
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
Vincent Composieux
 
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 JS
Matthieu Guillermin
 
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
HamzaElgari
 

Similaire à 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
 

Dernier

Dernier (12)

Quitter la nuit. pptx
Quitter        la             nuit.   pptxQuitter        la             nuit.   pptx
Quitter la nuit. pptx
 
Comment enseigner la langue française en Colombie?
Comment enseigner la langue française en Colombie?Comment enseigner la langue française en Colombie?
Comment enseigner la langue française en Colombie?
 
Festival de Cannes 2024. pptx
Festival    de   Cannes      2024.  pptxFestival    de   Cannes      2024.  pptx
Festival de Cannes 2024. pptx
 
PLANNING HEBDO ET CR LYCEE COUDON 21 MAI2024
PLANNING HEBDO ET CR LYCEE COUDON 21 MAI2024PLANNING HEBDO ET CR LYCEE COUDON 21 MAI2024
PLANNING HEBDO ET CR LYCEE COUDON 21 MAI2024
 
Système National de Santé au- Maroc-(2017)."pdf"
Système National de Santé au- Maroc-(2017)."pdf"Système National de Santé au- Maroc-(2017)."pdf"
Système National de Santé au- Maroc-(2017)."pdf"
 
Quitter la nuit. pptx
Quitter          la        nuit.    pptxQuitter          la        nuit.    pptx
Quitter la nuit. pptx
 
EL KATRY Reem: Proposition de Programme Artistique et Exposition pour les Écoles
EL KATRY Reem: Proposition de Programme Artistique et Exposition pour les ÉcolesEL KATRY Reem: Proposition de Programme Artistique et Exposition pour les Écoles
EL KATRY Reem: Proposition de Programme Artistique et Exposition pour les Écoles
 
Fiche - Accompagnement du travail coopératif au sein d’une équipe d’enseignan...
Fiche - Accompagnement du travail coopératif au sein d’une équipe d’enseignan...Fiche - Accompagnement du travail coopératif au sein d’une équipe d’enseignan...
Fiche - Accompagnement du travail coopératif au sein d’une équipe d’enseignan...
 
Présentation sur les Risques Électriques et Leur Prévention en Algérie
Présentation sur les Risques Électriques et Leur Prévention en AlgériePrésentation sur les Risques Électriques et Leur Prévention en Algérie
Présentation sur les Risques Électriques et Leur Prévention en Algérie
 
Webinaire Technologia | DAX : nouvelles fonctions
Webinaire Technologia | DAX : nouvelles fonctionsWebinaire Technologia | DAX : nouvelles fonctions
Webinaire Technologia | DAX : nouvelles fonctions
 
Traitement des eaux usées par lagunage a macrophytes.pptx
Traitement des eaux usées par lagunage a macrophytes.pptxTraitement des eaux usées par lagunage a macrophytes.pptx
Traitement des eaux usées par lagunage a macrophytes.pptx
 
Présentation Webinaire Cohésion - Concevoir et mettre en place une CMDB, comm...
Présentation Webinaire Cohésion - Concevoir et mettre en place une CMDB, comm...Présentation Webinaire Cohésion - Concevoir et mettre en place une CMDB, comm...
Présentation Webinaire Cohésion - Concevoir et mettre en place une CMDB, comm...
 

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