RestKit 是一個 open source 的 Objective-C 套件,支援 iOS 與 Mac OS X。
https://github.com/RestKit/RestKit
RestKit 幾乎完整包裝了所謂 MVVM 架構中的 VM,只要做些微調整,便可以輕易將 RESTful 的 API 轉換成 Objective-C 中的 Models。跟 Core Data 也進行了高度整合。
在 RestKit 中,只需要透過 RKObjectMapping,便可以將 API 回來的結果轉換成你所指定的 Model,這是一個簡單的範例,
有一個 Model - User 結構如下
@interface User : NSObject@property (nonatomic, copy) NSNumber *userID;@property (nonatomic, copy) NSString *name;@property (nonatomic, copy) NSString *screenName;@end建立 RKObjectManager 以及 API 的 base URL
NSURL *baseURL = [NSURL URLWithString:@"http://[API HOST]"];RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:baseURL];
透過 RKObjectMapping 建立 API 的 index 與 User 的 property 的對應,例如
RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[User class]];[userMapping addAttributeMappingsFromDictionary:@{@"id" : @"userID", @"screen_name" : @"screenName", @"name" : @"name"}];API 的結構像這樣
[{ "user": { "id": 31337,"name": "Blake Watters",
"screen_name": "Blake Watters"
}
}]
將 RKObjectMapping 註冊進 RKResponseDescriptor
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:userMapping
method:RKRequestMethodGET
pathPattern:@"[API URL pattern]"keyPath:nil
statusCodes:[NSIndexSet indexSetWithIndex:200]
];
將 RKResponseDescriptor 註冊進 RKObjectManager
[objectManager addResponseDescriptor:responseDescriptor];
接著透過 RKObjectManager 的 getObjectsAtPath 呼叫 API 便可以成功轉換了!
[objectManager getObjectsAtPath:@"[User API URL]" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { // success} failure:^(RKObjectRequestOperation *operation, NSError *error) { // failure}];
很神奇吧!其中還有許多細節沒有解釋到,例如 HTTP 的 status code 也會因為 RKResponseDescriptor 的描述影響 getObjectsAtPath 的 success or failure。
其他細節只能實際使用才能細細品嚐了。
沒有留言:
張貼留言