测试测试 | ✗ |
语语言 | Obj-C Objective C |
许可证 | Apache 2 |
发布上次发布 | 2014年12月 |
由 Dalton Cherry 维护。
依赖项 | |
DCModel | >= 0 |
AFNetworking | >= 0 |
JSONJoy | >= 0 |
RestReaper 使得 iOS 和 Mac OS X 上的 RESTFul 服务的交互变得快速且简单。它消除了解析 JSON 的样板,且完全异步。它是以流行的 Ruby on Rails API 路由(索引、显示、销毁、更新、创建或 CRUD 模型)为设计出发点。它还完全支持 coreData 对象,因此你可以在不编写大量样板代码的情况下,同步 RESTFul 网络资源。听起来好得不真实?那么前往示例看看如何让你的梦想成真吧!
我们的 JSON 对象看起来像这样
{
"id": 1,
"name": "Dalton",
"password_digest": "somecooldigest",
"first_name": "Dalton",
"last_name": "Cherry",
"screen_name": null,
"age": 22,
"employed": false,
"created_at": "2013-10-28T15:40:32.000Z",
"updated_at": "2013-10-28T22:30:02.000Z"
}
首先,我们需要创建一个 Reaper 子类单例对象来与我们的 RESTFul 服务交互。
@implementation APIReaper
+(instancetype)sharedReaper
{
static APIReaper *reaper = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
reaper = [[[self class] alloc] initWithBaseURL:[NSURL URLWithString:@"http://myapiservice"]];
[reaper.netManager.requestSerializer setAuthorizationHeaderFieldWithToken:@"myauthtoken"];
});
return reaper;
}
@end
以下是一个 NSManagedObject 示例。只需将你的子类从 NSMangedObject 更改为 RRManagedObject。
#import "RRManagedObject.h"
@interface User : RRManagedObject
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *firstName;
@property(nonatomic,copy)NSString *lastName;
@property(nonatomic,strong)NSNumber *age;
@property(nonatomic,strong)NSNumber *employed;
//just for create
@property(nonatomic,copy)NSString *passwordConfirmation;
@property(nonatomic,copy)NSString *password;
@end
然后在我们的 User.m 文件中,我们需要添加方法
+(NSString*)restResource
{
return @"users.json";
}
+(Reaper*)reaperType
{
return [APIReaper sharedReaper];
}
+(NSArray*)excludedParameters:(ReaperAction)action
{
if(action == ReaperActionCreate)
return nil;
return @[@"password",@"passwordConfirmation"];
}
接下来是正文内容!
//first pull all items from coreData that we have saved
[User all:^(NSArray *items){
for(User *user in items)
NSLog(@"user.name: %@",user.name);
//now it is time to go reap the restful service
[User reapIndex:^(Reaper *reaper, NSArray* objects){
//update our people as employed
user.employed = [NSNumber numberWithBool:YES];
[user reapSave:^(Reaper *reaper, User *item){
NSLog(@"successfully update: %@ employed: %@",item.name,item.employed);
}failure:^(Reaper *reaper, NSError* error){
NSLog(@"error: %@",[error localizedDescription]);
}];
}failure:^(Reaper *reaper, NSError* error){
NSLog(@"error: %@",[error localizedDescription]);
}];
}];
让我们分析一下刚刚发生了什么。我们首先从 CoreData 中拉取了所有 User 对象,因此我们知道我们已经有的是什么。接下来,我们“收割”了 RESTFul 服务的索引资源(在这个例子中是:http://mycoolRestService/users.json)。术语“收割”意味着我们查询了 users.json,将所有 JSON 对象转换为它们适当的 User 对象,并保存/更新了它们在 CoreData 中。最后,我们将每个对象的 employed 属性更新为 YES 并执行了一次 reapSave,这将更新后的属性发送到你的 RESTFul 服务,并将更改保存到 CoreData 中。注意,你无需为与 REST 服务或 CoreData 的交互编写任何样板代码,你只需像通常一样使用你的对象。
//find the first object from CoreData
[User where:@"objID == 1" success:^(id items){
user.employed = [NSNumber numberWithBool:YES];
[user reapSave:^(Reaper *reaper, User *item){
NSLog(@"successfully update: %@ employed: %@",item.name,item.employed);
}failure:^(Reaper *reaper, NSError* error){
NSLog(@"error: %@",[error localizedDescription]);
}];
}];
//find all John's and delete them
[User all:^(NSArray *items){
if([user.name isEqualToString:@"John"])
{
[user reapDestroy:^(Reaper* reaper){
NSLog(@"John was successfully deleted");
}failure:^(Reaper* reaper, NSError* error){
NSLog(@"error deleting John: %@",[error localizedDescription]);
}];
}
}];
//Create a new John Object
User* john = [User newObject]; //[[User alloc] init]; if not a ManagedObject
john.name = @"John";
john.firstName = @"John";
john.lastName = @"Doe";
john.age = @123;
john.password = @"test";
john.passwordConfirmation = @"test";
[john reapSave:^(Reaper *reaper, User *item){
NSLog(@"john objID: %@ name: %@",item.objID,item.name);
}failure:^(Reaper *reaper, NSError* error){
NSLog(@"error: %@",[error localizedDescription]);
}];
//1 is the resource show action you want to reap. (e.g. http://mycoolRestService/users/1.json)
[User reapShow:1 success:^(Reaper *reaper, id object){
NSLog(@"object: %@",object);
}failure:^(Reaper *reaper, NSError* error){
NSLog(@"error: %@",[error localizedDescription]);
}];
安装 RestReaper 的推荐方法是使用 CocoaPods 软件包管理器,因为它提供了灵活的依赖关系管理,并且安装简单。
通过 CocoaPods
如果尚未安装,请安装 CocoaPods
$ [sudo] gem install cocoapods
$ pod setup
切换到你的 Xcode 项目的目录中,创建并编辑你的 Podfile,并添加 RestReaper
$ cd /path/to/MyProject
$ touch Podfile
$ edit Podfile
platform :ios, '5.0'
# Or platform :osx, '10.8'
pod 'RestReaper'
将 RestReaper 安装到你的项目中
$ pod install
使用.Xcworkspace文件(而不是常规的项目文件)在Xcode中打开您的项目。
RestReaper 至少需要 iOS 5/Mac OS X 10.8 或更高版本。它依赖于以下框架:
RestReaper 采用 Apache 许可证。