SlideShare ist ein Scribd-Unternehmen logo
1 von 24
iOS
Webservices
Sebastian Meßingfeld
06.06.2013
1© FH AACHEN | Sebastian Meßingfeld
Inhalt
2© FH AACHEN | Sebastian Meßingfeld
•  Unterstützung von Webservices in iOS
•  Allgemein
•  SOAP
•  REST
•  Fazit
•  Demo
•  Tools
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
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
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
Webservices
Testen – SoapUI (Beispiel SOAP Abfrage)
6© FH AACHEN | Sebastian Meßingfeld
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
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];
SOAP
9© FH AACHEN | Sebastian Meßingfeld
Webservices
SOAP – Waaruuummmm?
10© FH AACHEN | Sebastian Meßingfeld
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
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
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
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;
REST
15© FH AACHEN | Sebastian Meßingfeld
Webservices
REST – Alle nutzen REST
16© FH AACHEN | Sebastian Meßingfeld
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
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)
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];!
Fazit
20© FH AACHEN | Sebastian Meßingfeld
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, ...)
Demo
22© FH AACHEN | Sebastian Meßingfeld
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
FH Aachen
Fachbereich Elektrotechnik & Informationstechnik
Sebastian Meßingfeld
24© FH AACHEN | Sebastian Meßingfeld

Weitere ähnliche Inhalte

Was ist angesagt?

OSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon Meggle
OSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon MeggleOSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon Meggle
OSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon MeggleNETWAYS
 
German Perl Workshop 2015 - Infrastruktur als Code
German Perl Workshop 2015 - Infrastruktur als CodeGerman Perl Workshop 2015 - Infrastruktur als Code
German Perl Workshop 2015 - Infrastruktur als CodeJan Gehring
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenMayflower GmbH
 
Foreman: Provisionierungswege (Webinar vom 31. März 2016)
Foreman: Provisionierungswege (Webinar vom 31. März 2016)Foreman: Provisionierungswege (Webinar vom 31. März 2016)
Foreman: Provisionierungswege (Webinar vom 31. März 2016)NETWAYS
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als CodeJan Gehring
 
Inside HTTP: Webdebugging mit FIddler
Inside HTTP: Webdebugging mit FIddlerInside HTTP: Webdebugging mit FIddler
Inside HTTP: Webdebugging mit FIddlerMax Nowack
 
Intro to scaling Databases
Intro to scaling DatabasesIntro to scaling Databases
Intro to scaling DatabasesHeiko Seebach
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondUlrich Krause
 
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)NETWAYS
 
Hypermedia APIs mit Javascript und Python
Hypermedia APIs mit Javascript und PythonHypermedia APIs mit Javascript und Python
Hypermedia APIs mit Javascript und PythonTimo Stollenwerk
 
Raspberry PI 4 Freifunk Offloader
Raspberry PI 4 Freifunk OffloaderRaspberry PI 4 Freifunk Offloader
Raspberry PI 4 Freifunk OffloaderAnnika Wickert
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch CachingAOE
 
Softwarearchitektur eines modernen Onlinespieles - PHPUnconference 2013
Softwarearchitektur eines modernen Onlinespieles - PHPUnconference 2013Softwarearchitektur eines modernen Onlinespieles - PHPUnconference 2013
Softwarearchitektur eines modernen Onlinespieles - PHPUnconference 2013Tobias Rojahn
 

Was ist angesagt? (14)

OSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon Meggle
OSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon MeggleOSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon Meggle
OSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon Meggle
 
Infra coders meetup
Infra coders meetupInfra coders meetup
Infra coders meetup
 
German Perl Workshop 2015 - Infrastruktur als Code
German Perl Workshop 2015 - Infrastruktur als CodeGerman Perl Workshop 2015 - Infrastruktur als Code
German Perl Workshop 2015 - Infrastruktur als Code
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
 
Foreman: Provisionierungswege (Webinar vom 31. März 2016)
Foreman: Provisionierungswege (Webinar vom 31. März 2016)Foreman: Provisionierungswege (Webinar vom 31. März 2016)
Foreman: Provisionierungswege (Webinar vom 31. März 2016)
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
 
Inside HTTP: Webdebugging mit FIddler
Inside HTTP: Webdebugging mit FIddlerInside HTTP: Webdebugging mit FIddler
Inside HTTP: Webdebugging mit FIddler
 
Intro to scaling Databases
Intro to scaling DatabasesIntro to scaling Databases
Intro to scaling Databases
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
 
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
 
Hypermedia APIs mit Javascript und Python
Hypermedia APIs mit Javascript und PythonHypermedia APIs mit Javascript und Python
Hypermedia APIs mit Javascript und Python
 
Raspberry PI 4 Freifunk Offloader
Raspberry PI 4 Freifunk OffloaderRaspberry PI 4 Freifunk Offloader
Raspberry PI 4 Freifunk Offloader
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
 
Softwarearchitektur eines modernen Onlinespieles - PHPUnconference 2013
Softwarearchitektur eines modernen Onlinespieles - PHPUnconference 2013Softwarearchitektur eines modernen Onlinespieles - PHPUnconference 2013
Softwarearchitektur eines modernen Onlinespieles - PHPUnconference 2013
 

Ähnlich wie Apple iOS - Webservices

Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere RESTMartin Abraham
 
FMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
FMK2017 - REST mobil- die andere Serververbindung by Volker KrambrichFMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
FMK2017 - REST mobil- die andere Serververbindung by Volker KrambrichVerein FM Konferenz
 
2010 - Basta!: REST mit WCF 4, Silverlight und AJAX
2010 - Basta!: REST mit WCF 4, Silverlight und AJAX2010 - Basta!: REST mit WCF 4, Silverlight und AJAX
2010 - Basta!: REST mit WCF 4, Silverlight und AJAXDaniel Fisher
 
Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...
Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...
Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...Peter Kirchner
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit RustJens Siebert
 
Backend-Services mit Rust
Backend-Services mit RustBackend-Services mit Rust
Backend-Services mit RustJens Siebert
 
Was kommt nach den SPAs
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAsQAware GmbH
 
REST mit APEX 18.1
REST mit APEX 18.1REST mit APEX 18.1
REST mit APEX 18.1Oliver Lemm
 
PrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFPrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFChristian Kaltepoth
 
Web-API-Design jenseits von REST und Request/Response
Web-API-Design jenseits von REST und Request/ResponseWeb-API-Design jenseits von REST und Request/Response
Web-API-Design jenseits von REST und Request/ResponseOPEN KNOWLEDGE GmbH
 
AngularJS für .NET-Entwickler
AngularJS für .NET-EntwicklerAngularJS für .NET-Entwickler
AngularJS für .NET-EntwicklerPeter Hecker
 
Schnittstellen und Webservices
Schnittstellen und WebservicesSchnittstellen und Webservices
Schnittstellen und WebservicesJakob .
 
WebAPIs mit ASP.NET MVC 6
WebAPIs mit ASP.NET MVC 6WebAPIs mit ASP.NET MVC 6
WebAPIs mit ASP.NET MVC 6Manfred Steyer
 
PageSpeed Extreme für das große Speed Update 2021
PageSpeed Extreme für das große Speed Update 2021PageSpeed Extreme für das große Speed Update 2021
PageSpeed Extreme für das große Speed Update 2021SEARCH ONE
 
Internet Information Services (deutsch)
Internet Information Services (deutsch)Internet Information Services (deutsch)
Internet Information Services (deutsch)Joerg Krause
 
Icinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresMatthias Jauernig
 

Ähnlich wie Apple iOS - Webservices (20)

Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere REST
 
FMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
FMK2017 - REST mobil- die andere Serververbindung by Volker KrambrichFMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
FMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
 
2010 - Basta!: REST mit WCF 4, Silverlight und AJAX
2010 - Basta!: REST mit WCF 4, Silverlight und AJAX2010 - Basta!: REST mit WCF 4, Silverlight und AJAX
2010 - Basta!: REST mit WCF 4, Silverlight und AJAX
 
Api services
Api servicesApi services
Api services
 
Web-API Design in Java
Web-API Design in JavaWeb-API Design in Java
Web-API Design in Java
 
Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...
Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...
Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
Backend-Services mit Rust
Backend-Services mit RustBackend-Services mit Rust
Backend-Services mit Rust
 
Was kommt nach den SPAs
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAs
 
REST mit APEX 18.1
REST mit APEX 18.1REST mit APEX 18.1
REST mit APEX 18.1
 
PrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFPrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSF
 
Web-API-Design jenseits von REST und Request/Response
Web-API-Design jenseits von REST und Request/ResponseWeb-API-Design jenseits von REST und Request/Response
Web-API-Design jenseits von REST und Request/Response
 
AngularJS für .NET-Entwickler
AngularJS für .NET-EntwicklerAngularJS für .NET-Entwickler
AngularJS für .NET-Entwickler
 
Schnittstellen und Webservices
Schnittstellen und WebservicesSchnittstellen und Webservices
Schnittstellen und Webservices
 
WebAPIs mit ASP.NET MVC 6
WebAPIs mit ASP.NET MVC 6WebAPIs mit ASP.NET MVC 6
WebAPIs mit ASP.NET MVC 6
 
Webapplikationen mit Node.js
Webapplikationen mit Node.jsWebapplikationen mit Node.js
Webapplikationen mit Node.js
 
PageSpeed Extreme für das große Speed Update 2021
PageSpeed Extreme für das große Speed Update 2021PageSpeed Extreme für das große Speed Update 2021
PageSpeed Extreme für das große Speed Update 2021
 
Internet Information Services (deutsch)
Internet Information Services (deutsch)Internet Information Services (deutsch)
Internet Information Services (deutsch)
 
Icinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga 2009 at Nagios Workshop
Icinga 2009 at Nagios Workshop
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core Middlewares
 

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
  • 6. Webservices Testen – SoapUI (Beispiel SOAP Abfrage) 6© 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];
  • 9. SOAP 9© FH AACHEN | Sebastian Meßingfeld
  • 10. Webservices SOAP – Waaruuummmm? 10© FH AACHEN | Sebastian Meßingfeld
  • 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;
  • 15. REST 15© FH AACHEN | Sebastian Meßingfeld
  • 16. Webservices REST – Alle nutzen REST 16© FH AACHEN | Sebastian Meßingfeld
  • 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];!
  • 20. Fazit 20© FH AACHEN | Sebastian Meßingfeld
  • 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, ...)
  • 22. Demo 22© FH AACHEN | Sebastian Meßingfeld
  • 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
  • 24. FH Aachen Fachbereich Elektrotechnik & Informationstechnik Sebastian Meßingfeld 24© FH AACHEN | Sebastian Meßingfeld