无敌的 iOS 网络通信库
RestKit是一个现代的Objective-C框架,用于在iOS和Mac OS X上实现RESTful Web服务客户端。它提供了一个强大的对象映射引擎,该引擎与Core Data无缝集成,并提供了一组简单的网络原语,用于映射建立在顶部的HTTP请求和响应。的AFNetworking。它具有一组经过精心设计的优雅API,这些API使访问和建模RESTful资源感到不可思议。例如,以下是访问Twitter公共时间轴并将JSON内容转换为Tweet对象数组的方法:
@interface RKTweet : NSObject
@property (nonatomic, copy) NSNumber *userID;
@property (nonatomic, copy) NSString *username;
@property (nonatomic, copy) NSString *text;
@end
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[RKTweet class]];
[mapping addAttributeMappingsFromDictionary:@{
@"user.name": @"username",
@"user.id": @"userID",
@"text": @"text"
}];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodAny pathPattern:nil keyPath:nil statusCodes:nil];
NSURL *url = [NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
RKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]];
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *result) {
NSLog(@"The public timeline Tweets: %@", [result array]);
} failure:nil];
[operation start];
概述
RestKit被设计为模块化的,每个模块都致力于在整个框架以及与主机平台之间维护最少的依赖关系集。库的核心是对象映射引擎,该引擎负责在表示形式之间转换对象(例如JSON / XML <->本地域对象)。
API快速入门
RestKit分为几个模块,这些模块将映射引擎与HTTP和Core Data集成完全分开,以提供最大的灵活性。每个模块中的键类在下面突出显示,并且每个模块都超链接到源代码中包含的README.md。
对象映射 | |
---|---|
RKObjectMapping | 封装用于转换由键-值编码键路径表示的对象表示的配置。 |
RKAttributeMapping | 根据源和目标键路径指定对象或实体映射中的属性之间的所需转换。 |
RKRelationshipMapping | 根据源和目标键路径以及用来映射子对象属性的RKObjectMapping指定嵌套的一个或多个子对象的所需映射。 |
RK动态映射 | 指定一个灵活的映射,在该映射中,关于要使用哪个RKObjectMapping来处理给定文档的决策将推迟到运行时。 |
RKMapperOperation | 提供用于将反序列化文档映射到一组本地域对象的接口。 |
RKMappingOperation | 一个的NSOperation执行使用对象表示之间的映射RKObjectMapping。 |
联网 | |
RKRequestDescriptor | 描述可以针对给定对象类型从应用程序发送到远程Web应用程序的请求。 |
RKResponseDescriptor | 根据对象映射,键路径,用于匹配URL的SOCKit模式以及一组状态码(它们定义了适合映射的情况)描述了可以从远程Web应用程序返回的对象可映射响应。给定的响应。 |
RKObjectParameterization | 执行给定对象到NSDictionary表示形式的映射,该表示形式适合用作HTTP请求的参数。 |
RKObjectRequestOperation | 一个NSOperation,它使用一组RKResponseDescriptor对象中表示的配置来发送HTTP请求并在已解析的响应主体上执行对象映射。 |
RKResponseMapperOperation | 一个的NSOperation提供用于对象映射的支撑NSHTTPURLResponse使用一组RKResponseDescriptor对象。 |
RKObjectManager | 捕获使用对象映射通过HTTP与RESTful Web应用程序通信的常见模式,包括:
|
路由器 | 从基本URL和一组RKRoute对象生成NSURL对象,这些对象描述了应用程序使用的相对路径。 |
RKRoute | 描述给定对象类型和HTTP方法的单个相对路径,对象的关系或符号名。 |
核心数据 | |
RKManagedObjectStore | 封装核心数据配置,包括NSManagedObjectModel,NSPersistentStoreCoordinator和一对NSManagedObjectContext对象。 |
RKEntityMapping | 为映射建模,以将对象表示形式转换为给定NSEntityDescription的NSManagedObject实例。 |
RKConnectionDescription | 描述用于使用外键属性在Core Data实体之间建立关系的映射。 |
RKManagedObjectRequestOperation | 一个的NSOperation子类发送所解析响应身体的HTTP请求和执行对象映射来创建NSManagedObject情况下,使用建立对象之间的关系RKConnectionDescription了孤立的对象的对象清洗,并且在远程后端系统不再存在。 |
RKManagedObjectImporter | 针对以下两种情况,使用RKEntityMapping对象提供对托管对象的批量映射的支持:
|
搜索 | |
RKSearchIndexer | 提供对在Core Data中为应用程序中实体的字符串属性生成全文可搜索索引的支持。 |
RKSearchPredicate | 生成给定文本字符串的NSCompoundPredicate,该字符串将搜索通过RKSearchIndexer跨任何索引实体建立的索引。 |
测验 | |
RKMappingTest | 给定已解析的文档以及对象或实体映射,为单元测试对象映射配置提供支持。根据预期的关键路径映射和/或预期的转换结果来配置预期。 |
RKTestFixture | 提供一个接口,可轻松生成用于单元测试的测试夹具数据。 |
RKTestFactory | 提供对创建用于测试的对象的支持。 |
例子
对象请求
托管对象请求
将客户端错误响应映射到NSError
在对象管理器中集中配置
要求
RestKit需要iOS 8.0或更高版本或Mac OS X 10.9或更高版本。
RestKit中使用了多个第三方开源库,包括:
- AFNetworking-网络支持
- LibComponentLogging-日志支持
- SOCKit-字符串<->对象编码
- iso8601parser-支持解析和生成ISO- 8601日期
必须将以下Cocoa框架链接到应用程序目标中,以进行正确的编译:
- iOS上的CFNetwork.framework
- CoreData.framework
- Security.framework
- iOS上的MobileCoreServices.framework或OS X上的CoreServices.framework
并且必须设置以下链接器标志:
- -ObjC
- -all_load
$ cd /path/to/MyProject
$ touch Podfile
$ edit Podfile
target "YOUR PROJECT" do
platform :ios, '7.0'
# Or platform :osx, '10.7'
pod 'RestKit', '~> 0.24.0'
end
# Testing and Search are optional components
pod 'RestKit/Testing', '~> 0.24.0'
pod 'RestKit/Search', '~> 0.24.0'
更多实例及常见问题:https://github.com/RestKit/RestKit