iPhone开发技巧之网络Web服务是本文要介绍的内容,说到XML不得不提WEB应用中最常见的几种通讯规范:SOAP,XML-RPC,REST,WSDL,JSON等,他们都是基于XML协定的。
在这里介绍几种处理web应用中可以利用的程序库:现在云计算技术很火,无论是类似 Google App Engine 的 PAAS 还是 Amazon EC2 的 IAAS 服务或者是类似 Twitter 的 SAAS。不可避免的都需要与 XML 打交道。所以掌握了这个标准,开发网络应用就不怕了。
关于这些协议的具体意义这里就不详述了,可查阅相关文档。这里只介绍一些封装好的类库,以便于开发。
WSDL2ObjC
WSDL2ObjC用来处理SOAP类型的web服务。同样也是基于libxml2的Objective-C类库。使用的时候除了libxml2的设定以外,还要添加 CFNetwork.framework 到工程中。
一个简单的例子如下所示:
- - (IBAction)pressedRequestButton:(id)sender {
- FriendsBinding *bFriends = [[FriendsService FriendsBinding] retain];
- bFriends.logXMLInOut = YES;
- bFriends.authUsername = u.text;
- bFriends.authPassword = p.text;
- types_getFavoriteColorRequestType *cRequest = [[types_getFavoriteColorRequestType new] autorelease];
- cRequest.friend = @"Johnny";
- [bFriends getFavoriteColorAsyncUsingRequest:cRequest delegate:self];
- }
- - (void) operation:(FriendsBindingOperation *)operation completedWithResponse:(FriendsBindingResponse *)response
- {
- NSArray *responseresponseHeaders = response.headers;
- NSArray *responseresponseBodyParts = response.bodyParts;
- for(id header in responseHeaders) {
- // here do what you want with the headers, if there's anything of value in them
- }
- for(id bodyPart in responseBodyParts) {
- /****
- * SOAP Fault Error
- ****/
- if ([bodyPart isKindOfClass:[SOAPFault class]]) {
- // You can get the error like this:
- tV.text = ((SOAPFault *)bodyPart).simpleFaultString;
- continue;
- }
- /****
- * Get Favorite Color
- ****/
- if([bodyPart isKindOfClass:[types_getFavoriteColorResponseType class]]) {
- types_getFavoriteColorResponseType *body = (types_getFavoriteColorResponseType*)bodyPart;
- // Now you can extract the color from the response
- q.text = body.color;
- continue;
- }
- // ...
- }
json-framework
json-framework 是一个用 Objective-C 解析 JSON 的程序 Framework。下载后安装到 ~/Library/ 下。然后启动 XCode,编辑项目的设定,如下图:
图片地址:http://www.yifeiyang.net/images/iphone/e38394e382afe38381e383a3-1.png
编译设定中,双击「结构 > 添加SDK」添加下面的sdk。
$HOME/Library/SDKs/JSON/$(PLATFORM_NAME).sdk同样在「链接 > 其他的链接标记」中添加如下的值。
-ObjC -ljson最后,在代码中添加 #import <JSON/JSON.h> 就可以使用了。使用的例子如下所示:
- NSString *urlString =
- @"http://twitter.com/statuses/user_timeline/tomute.json";
- NSURL *url = [NSURL URLWithString:urlString];
- NSString *jsonString = [NSString stringWithContentsOfURL:url
- encoding:NSUTF8StringEncoding
- error:nil];
- NSArray *jsonArray = [jsonString JSONValue];
- for (NSDictionary *dic in jsonArray) {
- // 打印信息
- NSLog([dic objectForKey:@"text"]);
- NSLog([dic objectForKey:@"created_at"]);
- }
需要注意的是,JSONValue解析后的返回值是 NSDictionary 或者是 NSArray ,所以像下面一样用id来表示返回的类型比较好。
上面的例子是取得Twitter信息的,url换为下面的后,又可以取得Flickr的照片了
http://api.flickr.com/services/rest/?method=flickr.photos.search&
api_key=@"APIKEY"&tags=@"Trip"&per_page=10&format=json&nojsoncallback=1
另外还有 TouchJSON,具体使用的方法都差不多,这里就不在叙述了。
CocoaREST
CocoaREST是一个用来处理RESTful的类库。如果你的程序想要处理Twitter,那么就可以用到它。
一个简单的例子如下所示:
- - (void) awakeFromNib {
- // inside a header file, declare manager as an instance variable
- SDTwitterManager *manager;
- // create out manager, retaining it as we want it to stick around
- manager = [[SDTwitterManager manager] retain];
- manager.successSelector = @selector(twitterManager:resultsReadyForTask:);
- manager.failSelector = @selector(twitterManager:failedForTask:);
- manager.delegate = self;
- // this is a must for certain API calls which require authentication
- // change them to real login values or the tasks will fail
- manager.username = @"USERNAME";
- manager.password = @"PASSWORD";
- // 3 tasks can be run simultaneously
- manager.maxConcurrentTasks = 3;
- // create and run a basic task
- SDTwitterTask *mentionsTask = [SDTwitterTask taskWithManager:manager];
- mentionsTask.type = SDTwitterTaskGetPersonalTimeline;
- mentionsTask.count = 3;
- mentionsTask.page = 10;
- [mentionsTask run];
- }
- - (void) twitterManager:(SDTwitterManager*)manager resultsReadyForTask:(SDTwitterTask*)task {
- NSLog(@"%@", task.results);
- }
- - (void) twitterManager:(SDTwitterManager*)manager failedForTask:(SDTwitterTask*)task {
- NSLog(@"%@", task.error);
- }
除此之外,当然还有很多的web服务应用,这里不能一一列举使用的方法,在以后会做一些更加详细的介绍。
小结:iPhone开发技巧之网络Web服务的内容介绍完了,希望本文对你有所帮助!