iPhone開發(fā)技巧之網(wǎng)絡(luò)Web服務(wù)
iPhone開發(fā)技巧之網(wǎng)絡(luò)Web服務(wù)是本文要介紹的內(nèi)容,說到XML不得不提WEB應用中最常見的幾種通訊規(guī)范:SOAP,XML-RPC,REST,WSDL,JSON等,他們都是基于XML協(xié)定的。
在這里介紹幾種處理web應用中可以利用的程序庫:現(xiàn)在云計算技術(shù)很火,無論是類似 Google App Engine 的 PAAS 還是 Amazon EC2 的 IAAS 服務(wù)或者是類似 Twitter 的 SAAS。不可避免的都需要與 XML 打交道。所以掌握了這個標準,開發(fā)網(wǎng)絡(luò)應用就不怕了。
關(guān)于這些協(xié)議的具體意義這里就不詳述了,可查閱相關(guān)文檔。這里只介紹一些封裝好的類庫,以便于開發(fā)。
WSDL2ObjC
WSDL2ObjC用來處理SOAP類型的web服務(wù)。同樣也是基于libxml2的Objective-C類庫。使用的時候除了libxml2的設(shè)定以外,還要添加 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,編輯項目的設(shè)定,如下圖:
圖片地址:http://www.yifeiyang.net/images/iphone/e38394e382afe38381e383a3-1.png
編譯設(shè)定中,雙擊「結(jié)構(gòu) > 添加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服務(wù)應用,這里不能一一列舉使用的方法,在以后會做一些更加詳細的介紹。
小結(jié):iPhone開發(fā)技巧之網(wǎng)絡(luò)Web服務(wù)的內(nèi)容介紹完了,希望本文對你有所幫助!