Node js for Mobile App

1 092 vues

Publié le

Publié dans : Formation
1 commentaire
2 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
1 092
Sur SlideShare
0
Issues des intégrations
0
Intégrations
11
Actions
Partages
0
Téléchargements
41
Commentaires
1
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Node js for Mobile App

  1. 1. NodeJS for Mobile Apps Habib MAALEM
  2. 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. 3. Habib MAALEM Développeur Front End @AllégorieTV LinkedIn dz.linkedin.com/in/habibmaalem Twitter twitter.com/HabibMAALEM
  4. 4. NodeJS ?? C’est quoi NodeJS Que fait NodeJS Pourquoi NodeJS Cas d’utilisation
  5. 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. 6. Que fait NodeJS ? 1. NodeJS est un serveur 2. Programmation non bloquante (Callbacks) 3. Programmation Événementiel
  7. 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. 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. 9. Programmation Événementiel * Node est basé sur un modèle d’ événement. Tout est basé sur des messages
  10. 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
  11. 11. “single-thread event loop”
  12. 12. “single-thread event loop”
  13. 13. “single-thread event loop”
  14. 14. Les Modules 1. NPM: Node Packaged Module 2. Plus de 62 000 modules 3. Une installation simple et facile
  15. 15. Les Modules 1. Don't Repeat Yourself 2. Don't Reinvent the Wheel 3. Learn 2 Search ‘npm install -g grunt’
  16. 16. Node Packaged Modules
  17. 17. 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
  18. 18. Qui utilisent NodeJS LinkedIn eBay Walmart
  19. 19. RESTful API ? REST: Representational State Transfer API: Application Programming Interface ‘GET’ ‘PUT’ ‘POST’ ‘DELETE’
  20. 20. RESTful API ? Méthode HTTP Étape CRUD POST Create GET Read PUT Update DELETE Delete
  21. 21. 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...');
  22. 22. 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
  23. 23. 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).
  24. 24. 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
  25. 25. 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 »
  26. 26. 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
  27. 27. SDK : Kit de développement
  28. 28. 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) {...} }
  29. 29. 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.
  30. 30. 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
  31. 31. 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(...);
  32. 32. 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); }); } ));
  33. 33. Merci
  34. 34. Questions

×