introduction à la consommation de web services sur ios

29
Introduction à la consommation de Web Services sur iOS CocoaHeads Lyon 19 Avril 2012 Mustapha Ben Lechhab @nsdeveloppeur http://techilm.com jeudi 19 avril 12

Upload: nsdeveloppeur

Post on 25-May-2015

2.983 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Introduction à la consommation de Web Services sur iOS

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

•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

Cas d’utilisation

jeudi 19 avril 12

Page 4: Introduction à la consommation de Web Services sur iOS

•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

•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

•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

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

Solutions ?

•Utiliser une API dédiée pour chaque contexte ?

jeudi 19 avril 12

Page 9: Introduction à la consommation de Web Services sur iOS

Solutions ?

•Utiliser une API dédiée pour chaque contexte ?

jeudi 19 avril 12

Page 10: Introduction à la consommation de Web Services sur iOS

Solutions ?

•Utiliser une API dédiée pour chaque contexte ?

jeudi 19 avril 12

Page 11: Introduction à la consommation de Web Services sur iOS

jeudi 19 avril 12

Page 12: Introduction à la consommation de Web Services sur iOS

Web Services

jeudi 19 avril 12

Page 13: Introduction à la consommation de Web Services sur iOS

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

Web Services

•2 Catégories

•REST - Stateless

•SOAP / WSDL - Stateful

jeudi 19 avril 12

Page 15: Introduction à la consommation de Web Services sur iOS

Web Services

•2 Catégories

•REST - Stateless

•SOAP / WSDL - Stateful

jeudi 19 avril 12

Page 16: Introduction à la consommation de Web Services sur iOS

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

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

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

Implémentation

jeudi 19 avril 12

Page 20: Introduction à la consommation de Web Services sur iOS

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

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

Appel depuis iOS

jeudi 19 avril 12

Page 23: Introduction à la consommation de Web Services sur iOS

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

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

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

Peuplement du modèle

jeudi 19 avril 12

Page 27: Introduction à la consommation de Web Services sur iOS

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

Démo

jeudi 19 avril 12

Page 29: Introduction à la consommation de Web Services sur iOS

CocoaHeads Lyon19 Avril 2012

Mustapha Ben Lechhab@nsdeveloppeur

http://techilm.comhttp://github.com/techilm/introduction-ws-ios-cocoaheads

Merci !jeudi 19 avril 12