introduction à la consommation de web services sur ios
TRANSCRIPT
![Page 1: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/1.jpg)
Introduction à la consommation de Web Services sur iOS
CocoaHeads Lyon19 Avril 2012Mustapha Ben Lechhab@nsdeveloppeurhttp://techilm.com
jeudi 19 avril 12
![Page 2: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/2.jpg)
•Cas d’utilisation / Problème
•Web Services ?
• Implémentation de la solution
•Appel depuis iOS
•Peuplement du modèle
Plan
jeudi 19 avril 12
![Page 3: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/3.jpg)
Cas d’utilisation
jeudi 19 avril 12
![Page 4: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/4.jpg)
•Sources de données hétérogènes• Sites Web | CMS
• Données décentralisées (contexte multisites)
• Open Data
• ...
Cas d’utilisation
jeudi 19 avril 12
![Page 5: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/5.jpg)
•Représentations hétérogènes
•MySQL, PgSQL, Oracle...
•NoSQL / KV Store
•XML
•Graphes RDF
• ...
Cas d’utilisation
jeudi 19 avril 12
![Page 6: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/6.jpg)
•Manipulation hétérogènes
• SQL
•XQuery
• SPARQL
• ...
Cas d’utilisation
jeudi 19 avril 12
![Page 7: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/7.jpg)
Comment manipuler ces données depuis
une App iOS ?
Cas d’utilisation
jeudi 19 avril 12
![Page 8: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/8.jpg)
Solutions ?
•Utiliser une API dédiée pour chaque contexte ?
jeudi 19 avril 12
![Page 9: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/9.jpg)
Solutions ?
•Utiliser une API dédiée pour chaque contexte ?
jeudi 19 avril 12
![Page 10: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/10.jpg)
Solutions ?
•Utiliser une API dédiée pour chaque contexte ?
jeudi 19 avril 12
![Page 11: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/11.jpg)
jeudi 19 avril 12
![Page 12: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/12.jpg)
Web Services
jeudi 19 avril 12
![Page 13: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/13.jpg)
Web Services
•Standard du W3C
•Définition formelle :
• Interoperabilité automatisée entre plusieurs systèmes
jeudi 19 avril 12
![Page 14: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/14.jpg)
Web Services
•2 Catégories
•REST - Stateless
•SOAP / WSDL - Stateful
jeudi 19 avril 12
![Page 15: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/15.jpg)
Web Services
•2 Catégories
•REST - Stateless
•SOAP / WSDL - Stateful
jeudi 19 avril 12
![Page 16: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/16.jpg)
Web Service REST
•2 éléments fondamentaux :
• URI
• Opérations pré-définies (GET, POST, PUT, DELETE)
jeudi 19 avril 12
![Page 17: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/17.jpg)
Web Service REST
•2 éléments fondamentaux :
• URI
• Opérations pré-définies (GET, POST, PUT, DELETE)
http://toto.com/client/1234/facture/27
jeudi 19 avril 12
![Page 18: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/18.jpg)
Web Service RESTRequête HTTP URI
Retour données (JSON, XML)
Client Serveur
• Réception de la demande
• Exécution du programme associée
• Interaction avec les données
• Renvoi du résultat
• Demande au serveur
• Parse du résultat
• Affichage sur l’UI
jeudi 19 avril 12
![Page 19: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/19.jpg)
Implémentation
jeudi 19 avril 12
![Page 20: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/20.jpg)
Contexte des données distantes
•Site Joomla
•Module EventList
•Base MySQL
•Serveur PHP
jeudi 19 avril 12
![Page 21: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/21.jpg)
Aperçu du Service Web<?php$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
![Page 22: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/22.jpg)
Appel depuis iOS
jeudi 19 avril 12
![Page 23: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/23.jpg)
Méthode d’appel
• Plusieurs possibilités :
•
• Appels asynchrones : (GCD, NSOperationQueue...)
• Construction requête HTTP
• Utilisation d’API dédiées REST
...withURL:(NSURL *)url...
jeudi 19 avril 12
![Page 24: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/24.jpg)
Traitements des données
•Parse du JSON
• iOS 5+ : API Native
•Sinon, JSONKit (entre autres...)
jeudi 19 avril 12
![Page 25: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/25.jpg)
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 du modèle avec les données parsées
// Ajout de l’objet au tableau du contrôleur
jeudi 19 avril 12
![Page 26: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/26.jpg)
Peuplement du modèle
jeudi 19 avril 12
![Page 27: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/27.jpg)
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
![Page 28: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/28.jpg)
Démo
jeudi 19 avril 12
![Page 29: Introduction à la consommation de Web Services sur iOS](https://reader033.vdocuments.site/reader033/viewer/2022052900/556316d1d8b42a51498b4ecd/html5/thumbnails/29.jpg)
CocoaHeads Lyon19 Avril 2012
Mustapha Ben Lechhab@nsdeveloppeur
http://techilm.comhttp://github.com/techilm/introduction-ws-ios-cocoaheads
Merci !jeudi 19 avril 12