Weitere ähnliche Inhalte
Ähnlich wie Apple iOS - Webservices (20)
Apple iOS - Webservices
- 2. Inhalt
2© FH AACHEN | Sebastian Meßingfeld
• Unterstützung von Webservices in iOS
• Allgemein
• SOAP
• REST
• Fazit
• Demo
• Tools
- 3. Webservices
Allgemein
• keine komfortable Unterstützung für REST / SOAP
und andere WS in Cocoa Touch vorhanden
• keine speziellen WS-API vorhanden
• rudimentäre Abfrage von Ressourcen über URLs
möglich
• deckt Möglichkeiten des HTTP-Protokoll ab
• Verarbeitung von Rückgaben
• keine komfortable XML/JSON/CVS ... API für
Verarbeitung in Cocoa Touch vorhanden
• siehe Praktikum „Daten“
• Verwendung von Dritt-Bibliotheken nötig
3© FH AACHEN | Sebastian Meßingfeld
- 4. Webservices
Allgemein
• keine „Rapid-Prototyping“-Unterstützung für
Entwicklung / zum Testen
• wie, z.B. generelle Kommunikation mit WS
• + Erweiterungen, wie OAuth
• REST-Lösung:
• Skript-Sprachen: schnelle Implementierung (Ruby)
• Tools: SoapUI (mit WADL)
• SOAP-Lösung:
• Tools: SoapUI, Oxygen XML Editor (beides WSDL)
• Ergebnisse des Prototypings können nicht direkt in
Cocoa Touch weiterverwendet / -verarbeitet werden
4© FH AACHEN | Sebastian Meßingfeld
- 5. Webservice
Testen - SoapUI
• SoapUI: Test-Tool für Webservices
• Unterstützung für SOAP und REST
• SOAP-Unterstützung besser, da WSDL immer
vorhanden ist
• Unterstützung für WADL für REST auch
vorhanden
• WS-Abfragen sind über eine dynamische GUI
möglich
5© FH AACHEN | Sebastian Meßingfeld
- 7. Webservices
Kommunikation über HTTP mittels Cocoa Touch
7© FH AACHEN | Sebastian Meßingfeld
• HTTP-Requests möglich
• synchron
• asynchron (Verarbeitung über Callback-Methoden)
• Requests anpassbar
• HTTP-Methode („POST“, „GET“)
• HTTP-Header (Standard + eigene)
• POST-Daten
• Kommunikation zu allen Webservices damit
möglich
• ggf. jedoch sehr aufwendig
- 8. Webservices
HTTP Request in Cocoa Touch (Beispiel)
8© FH AACHEN | Sebastian Meßingfeld
// Request mit Ziel-URL erstellen!
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL
" " URLWithString:@"http://localhost:8888/ios.php"]];!
// HTTP-Methode setzen!
[request setHTTPMethod:@"POST"];!
!
// Modifizieren / Hinzufuegen von HTTP-Headern!
[request setValue:@"Access-Control-Max-Age" forHTTPHeaderField:@"1728000"];!
!
// POST-Daten!
// Key-Value-Paare!
NSString *postFields = @"username=Max&passwort=Mustermann";!
// "Rohdaten”!
NSString *postRaw = @"{'username':'Max','password':'Mustermann'}";!
!
// Setzen der zu sendenen Daten (postRaw oder postFields)!
NSData *postData = [postRaw dataUsingEncoding:NSUTF8StringEncoding];!
[request setHTTPBody:postData];!
!
// Request absetzen!
[NSURLConnection sendSynchronousRequest:request returningResponse:nil
" " " " " error:nil];
- 11. Webservices
SOAP – Cocoa Touch
11© FH AACHEN | Sebastian Meßingfeld
• keine Lösung in Cocoa Touch vorhanden
• Request
• XML-DOM selbst zusammenbauen
• String-Verknüpfung (als eine Art Template)
• Response
• NSXML (SAX)
• libxml2 (DOM-Verarbeitung / C Bibliothek)
• Dritt-Bibliothek: z.B. TouchXML
• keine (gute) Dritt-Bibliothek für SOAP vorhanden
- 12. Webservices
SOAP – Code-Generierung
12© FH AACHEN | Sebastian Meßingfeld
• Generierung von Code auf Basis von WSDL
• mittels wsdl2objc
• Abstrahierung der Soap Requests
• erzeugt im „Hintergrund“ XML Baum für Request
- 13. Webservices
SOAP – Code-Generierung mittels wsdl2objc
13© FH AACHEN | Sebastian Meßingfeld
• Vorteile
• Verwendung des WS über ObjC Methoden
• wenig Berührungspunkte mit XML
• SOAPSecurity vorhanden (Signierung / Zertifikate)
• nicht getestet
• Nachteile
• erzeugt 13.952 Zeilen („statischen“) Code
• Kenntnisse über den Aufbau des WS nötig
• Tool ist „alt“ und wird nicht weiter gepflegt
• erzeugt keinen ARC-Code
• Code funktionierte nur nach eigenen Anpassungen
(bei Bing WS)
• kein parameters Knoten im Request erzeugt
- 14. Webservices
SOAP – Code-Generierung mittels wsdl2objc
14© FH AACHEN | Sebastian Meßingfeld
BingPortBinding *binding = [BingServiceSvc BingPortBinding];!
binding.logXMLInOut = @YES;!
!
// Erzeugung des Services!
BingServiceSvc_SearchRequest *request = [BingServiceSvc_SearchRequest new];!
request.AppId = @”****************************************";!
request.Version = @"2.2";!
request.Query = @"Borussia Dortmund";!
request.Adult = BingServiceSvc_AdultOption_Moderate;!
!
// Source Typen festlegen!
BingServiceSvc_ArrayOfSourceType* sources = [BingServiceSvc_ArrayOfSourceType new];!
[sources addSourceType:BingServiceSvc_SourceType_Web];!
!
// Web-Request !
BingServiceSvc_WebRequest *webRequest = [BingServiceSvc_WebRequest new];!
webRequest.Offset = @0;!
webRequest.Count = @1;!
!
request.Sources = sources;!
request.Web = webRequest;!
!
// Ergebnisse verarbeiten!
BingPortBindingResponse *response = [binding SearchUsingParameters:request];!
NSArray *responseHeaders = response.headers;!
NSArray *responseBodyParts = response.bodyParts;
- 17. Webservices
REST
17© FH AACHEN | Sebastian Meßingfeld
• Keine native Unterstützung in Coacoa Touch
• Interaktion durch direkte HTTP-Requests oder
Dritt-Bibliotheken
• Restly
• RestKit
• Keine WADL Unterstützung
- 18. Webservices
REST – RestKit
18© FH AACHEN | Sebastian Meßingfeld
• Objective-C Framework für iOS zur Interaktion
mit RESTful WS
• „simple, fast and fun“
• Umfangreiche Funktionalität
• HTTP Request/Response System
• Object-Mapper
• Core Data Support
• Unterstützt JSON
• Erweiterbar um weitere Parser (z.B. XML)
- 19. Webservices
REST – Request und Mapping
19© FH AACHEN | Sebastian Meßingfeld
NSURL *baseUrl = [NSURL URLWithString:@"http://foo.bar/api1/"];!
!
// ObjectManager für WS erstellen!
RKObjectManager* manager = [RKObjectManager managerWithBaseURL:baseUrl];!
[manager.HTTPClient setDefaultHeader:@"X-Custom-Header" value:@"foobar"];!
!
// Router für Klasse Article setzen!
[manager.router.routeSet addRoute:[RKRoute routeWithClass:[Article class] !
pathPattern:@"/articles/:articleID/" method:RKRequestMethodGET]];!
!
// leeres Article-Objekt für Response erstellen!
Article *article = [Article new];!
!
// GET Request senden an '/articles/12345‘!
[manager getObject:article path:nil parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *result) {!
NSLog(@"Loading mapping result: %@", result);!
} failure:nil];!
- 21. Webservices
Fazit für iOS
21© FH AACHEN | Sebastian Meßingfeld
• keine einheitlichen Standards bei WS vorhanden
• bspw. Authentifizierung
• SOAP Unterstützung quasi nicht vorhanden
• „REST“ hat (zu) viele Ausprägungen
• Zugriffe auf Webservices nicht immer „App-
geeignet“
• bspw. Authentifizierung (OAuth: Callback)
• daher Zugriffe auf Webservice häufig über SDK
des Webservice-Anbieters (Facebook, Twitter, ...)
- 23. Tools / Bibliotheken
• SOAP / XML
• SoapUI
• http://www.soapui.org/
• Oxygen XML Editor
• WSDL SOAP Analysator
• wsdl2objc
• https://code.google.com/p/wsdl2objc/
23© FH AACHEN | Sebastian Meßingfeld