RestReaper 0.1.2

RestReaper 0.1.2

测试测试
语言 Obj-C Objective C
许可证 Apache 2
发布上次发布2014年12月

Dalton Cherry 维护。



 
依赖项
DCModel>= 0
AFNetworking>= 0
JSONJoy>= 0
 

  • 作者:
  • Dalton Cherry

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 许可证。

联系

Dalton Cherry