CocoaHeads Lyon                    19 Avril 2012                    Mustapha Ben Lechhab                    @nsdeveloppeur...
Plan          •         Cas d’utilisation / Problème          • Web Services ?          • Implémentation de la solution   ...
Cas                    d’utilisationjeudi 19 avril 12
Cas d’utilisation         •          Sources de données hétérogènes                • Sites Web | CMS                • Donn...
Cas d’utilisation         •          Représentations hétérogènes                •    MySQL, PgSQL, Oracle...              ...
Cas d’utilisation         •          Manipulation hétérogènes                •    SQL                • XQuery             ...
Cas d’utilisation                    Comment manipuler                    ces données depuis                      une App ...
Solutions ?                    • Utiliser une API dédiée pour                     chaque contexte ?jeudi 19 avril 12
Solutions ?                    • Utiliser une API dédiée pour                     chaque contexte ?jeudi 19 avril 12
Solutions ?                    • Utiliser une API dédiée pour                     chaque contexte ?jeudi 19 avril 12
jeudi 19 avril 12
Web Servicesjeudi 19 avril 12
Web Services                    •Standard du W3C                    • Définition formelle :                     • Interoper...
Web Services                    •2 Catégories                     • REST - Stateless                     • SOAP / WSDL - S...
Web Services                    •2 Catégories                     • REST - Stateless                     • SOAP / WSDL - S...
Web Service REST                    •   2 éléments fondamentaux :                    • URI                    • Opérations...
Web Service REST                    •   2 éléments fondamentaux :                    •    URI   http://toto.com/client/123...
Web Service REST                                 Requête HTTP URI                                                         ...
Implémentationjeudi 19 avril 12
Contexte des données                          distantes                    •Site Joomla                    • Module EventL...
<?php                    Aperçu du Service Web      $link = mysql_connect(INFORMATIONS DE CONNEXION A LA BASE);      // Co...
Appel depuis iOSjeudi 19 avril 12
Méthode d’appel         • Plusieurs possibilités :                •   ...withURL:(NSURL *)url...                •   Appels...
Traitements des données        • Parse du JSON         • iOS 5+ : API Native         • Sinon, JSONKit (entre autres...)jeu...
API Native iOS 5+         NSError* error;         NSDictionary* json = [NSJSONSerialization                               ...
Peuplement du                modèlejeudi 19 avril 12
Instanciation du modèle      -(id)initWithDictionary:(NSDictionary *) dataDict{          self = [super init];          if ...
Démojeudi 19 avril 12
CocoaHeads Lyon                                                                19 Avril 2012                      Merci ! ...
Prochain SlideShare
Chargement dans…5
×

Introduction à la consommation de Web Services sur iOS

3 835 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
3 835
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1
Actions
Partages
0
Téléchargements
26
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Introduction à la consommation de Web Services sur iOS

  1. 1. CocoaHeads Lyon 19 Avril 2012 Mustapha Ben Lechhab @nsdeveloppeur http://techilm.com Introduction à la consommation de Web Services sur iOSjeudi 19 avril 12
  2. 2. Plan • Cas d’utilisation / Problème • Web Services ? • Implémentation de la solution • Appel depuis iOS • Peuplement du modèlejeudi 19 avril 12
  3. 3. Cas d’utilisationjeudi 19 avril 12
  4. 4. Cas d’utilisation • Sources de données hétérogènes • Sites Web | CMS • Données décentralisées (contexte multisites) • Open Data • ...jeudi 19 avril 12
  5. 5. Cas d’utilisation • Représentations hétérogènes • MySQL, PgSQL, Oracle... • NoSQL / KV Store • XML • Graphes RDF • ...jeudi 19 avril 12
  6. 6. Cas d’utilisation • Manipulation hétérogènes • SQL • XQuery • SPARQL • ...jeudi 19 avril 12
  7. 7. Cas d’utilisation Comment manipuler ces données depuis une App iOS ?jeudi 19 avril 12
  8. 8. Solutions ? • Utiliser une API dédiée pour chaque contexte ?jeudi 19 avril 12
  9. 9. Solutions ? • Utiliser une API dédiée pour chaque contexte ?jeudi 19 avril 12
  10. 10. Solutions ? • Utiliser une API dédiée pour chaque contexte ?jeudi 19 avril 12
  11. 11. jeudi 19 avril 12
  12. 12. Web Servicesjeudi 19 avril 12
  13. 13. Web Services •Standard du W3C • Définition formelle : • Interoperabilité automatisée entre plusieurs systèmesjeudi 19 avril 12
  14. 14. Web Services •2 Catégories • REST - Stateless • SOAP / WSDL - Statefuljeudi 19 avril 12
  15. 15. Web Services •2 Catégories • REST - Stateless • SOAP / WSDL - Statefuljeudi 19 avril 12
  16. 16. Web Service REST • 2 éléments fondamentaux : • URI • Opérations pré-définies (GET, POST, PUT, DELETE)jeudi 19 avril 12
  17. 17. Web Service REST • 2 éléments fondamentaux : • URI http://toto.com/client/1234/facture/27 • Opérations pré-définies (GET, POST, PUT, DELETE)jeudi 19 avril 12
  18. 18. Web Service REST Requête HTTP URI • Réception de la • Demande au demande serveur • Exécution du • Parse du programme associée résultat • Interaction avec • Affichage sur les données l’UI • Renvoi du résultat Retour données (JSON, XML) Client Serveurjeudi 19 avril 12
  19. 19. Implémentationjeudi 19 avril 12
  20. 20. Contexte des données distantes •Site Joomla • Module EventList • Base MySQL • Serveur PHPjeudi 19 avril 12
  21. 21. <?php Aperçu du Service Web $link = mysql_connect(INFORMATIONS DE CONNEXION A LA BASE); // Connexion à la base $sql = SELECT E.dates, E.times, E.title, L.venue, L.street, L.plz, L.city FROM jos_eventlist_events E, jos_eventlist_venues L WHERE E.published = 1 AND E.locId = L.id ORDER BY dates DESC ; // Requête récupérant les événements $result = mysql_query($sql, $link); // Exécution de la requête $i=0; while ($row = mysql_fetch_assoc($result)) { $tab[$i] = array( "date" => mb_convert_encoding (($row[dates]), "UTF-8", "ISO-8859-1" ), // Idem pour le reste des colonnes ); // Ajout des tuples dans un tableau associatif $i++; } echo json_encode($tab); // Renvoi JSON du tableau associatif ?>jeudi 19 avril 12
  22. 22. Appel depuis iOSjeudi 19 avril 12
  23. 23. Méthode d’appel • Plusieurs possibilités : • ...withURL:(NSURL *)url... • Appels asynchrones : (GCD, NSOperationQueue...) • Construction requête HTTP • Utilisation d’API dédiées RESTjeudi 19 avril 12
  24. 24. Traitements des données • Parse du JSON • iOS 5+ : API Native • Sinon, JSONKit (entre autres...)jeudi 19 avril 12
  25. 25. API Native iOS 5+ NSError* error; NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data // NSData récupéré options:kNilOptions error:&error]; tableauEvent = [[NSMutableArray alloc] init]; for (NSDictionary *dic in json) { BMEvent *event = [[BMEvent alloc]initWithDictionary:dic]; [tableauEvent addObject:event]; } // Instanciation d’un objet // Ajout de l’objet au du modèle avec les données tableau du contrôleur parséesjeudi 19 avril 12
  26. 26. Peuplement du modèlejeudi 19 avril 12
  27. 27. Instanciation du modèle -(id)initWithDictionary:(NSDictionary *) dataDict{ self = [super init]; if (self) { self.date = (NSDate *) [dataDict objectForKey:@"date"]; self.heure = (NSDate *) [dataDict objectForKey:@"heure"]; self.titre = [dataDict objectForKey:@"titre"]; self.adresse = [dataDict objectForKey:@"adresse"]; self.codePostal = [dataDict objectForKey:@"codepostal"]; self.ville = [dataDict objectForKey:@"ville"]; } return self; }jeudi 19 avril 12
  28. 28. Démojeudi 19 avril 12
  29. 29. CocoaHeads Lyon 19 Avril 2012 Merci ! Mustapha Ben Lechhab @nsdeveloppeur http://techilm.com http://github.com/techilm/introduction-ws-ios-cocoaheadsjeudi 19 avril 12

×