Introduction à la consommation de Web Services sur iOS

3 804 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 804
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

×