SOA-iOS-SDK 0.1.3

SOA-iOS-SDK 0.1.3

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2014年12月

Andre Espeiorin维护。



SOA Server 是构建您的 Web 服务的好方法,它建立在 Silex 和 Doctrine 2 的基础上,但是使用 iOS 作为客户端,您无法获得同样的体验,直到现在。在长时间使用 SOA Server 之后,我决定使用相同的思维方式与 Objective-C 结合,结果是这个库。

获取 SOA iOS SDK

配置

为了使 SOA SDK 能够工作,您必须配置 API URL 和共享头信息。

  • REST 调用的 apiURL
  • RPC 调用的 rpcURL
[SOAManager defaultManager].apiURL = [NSURL URLWithString:@"http://serveraddress.com/api/v1"];

[SOAManager defaultManager].rpcURL = [NSURL URLWithString:@"http://serveraddress.com/rpc/v1"];

[[SOAManager defaultManager] setDefaultHeaders:@{@"Authorization" : @"_authorization_token_"}];

包括 REST API 中可用的各个 HTTP 方法的共享头信息。

SOAServiceMethodGET,
SOAServiceMethodPOST,
SOAServiceMethodPUT,
SOAServiceMethodDELETE,
SOAServiceMethodALL

[[SOAManager defaultManager] setDefaultHeaders:@{@"Content-Type" : @"application/x-www-form-urlencoded"} forMethod:SOAServiceMethodPOST];

[[SOAManager defaultManager] setDefaultHeaders:@{@"Content-Type" : @"application/x-www-form-urlencoded"} forMethod:SOAServiceMethodPUT];

杂项

目前,您可以为并发请求的队列限制进行配置,并且也可以将显示或隐藏网络活动状态的职责委托给 SOA SDK。

[SOAManager defaultManager].maxConcurrentRequests = 4;
[SOAManager defaultManager].controlNetworkActivity = YES;

SOA 对象

SOAObject 是一个 NSObject 子类,用于存储实体的数据。SOAObject 只有一个强制性属性,即实体名称,但您可以设置实体 ID。这两个属性都是为了识别对象而设计的。

除此之外,您可以使用 setValue:forKey: 存储任何类型的数据(指针),也可以使用 valueForKey: 方法检索数据。

创建新对象

SOAObject *hotel = [[SOAObject alloc] initWithEntityName:@"hotel"];

SOAObject *knownHotel = [[SOAObject alloc] initWithEntityName:@"hotel" entityId:12];

处理数据

[hotel setValue:@"Ibis" forKey:@"name"];
[hotel setValue:@"R. Nove de Março" forKey:@"street"];

NSString *name = [hotel valueForKey:@"name"];

获取对象

[SOAObject getWithEntityName:@"hotel"
                    entityId:12
             completionBlock:^(id result, NSError *error) {
                 SOAObject *object = (SOAObject *)result;
             }];

保存对象

静态方法
[SOAObject saveEntity:@"hotel"
           parameters:@{
                        @"id" : @(10),
                        @"name" : @"Bourbon",
                        @"street" : @"R. Visconde de Taunay"
                        }
      completionBlock:^(id result, NSError *error) {

      }];
实例方法
[hotel saveWithCompletionBlock:^(id result, NSError *error) {

}];

删除对象

静态方法
[SOAObject getWithEntityName:@"hotel"
                    entityId:12
             completionBlock:^(id result, NSError *error) {
                 SOAObject *object = (SOAObject *)result;
             }];
实例方法
[hotel deleteWithCompletionBlock:^(id result, NSError *error) {

}];

SOA 查询

构建查询

SOAQuery *query = [[SOAQuery alloc] initWithEntityName:@"hotel"];
query.offset = 0;
query.limit = 100;
query.fields = @[@"name", @"id"];

SOA 过滤器

SOAFilter *filter = [SOAFilter where:@"id" equalTo:@26];
[query addFilter:filter];

SOA 连接

SOAFilter *joinFilter = [SOAFilter where:@"id" equalTo:@10];
SOAJoin *join = [SOAJoin joinField:@"user" withFilter:joinFilter];
[query addJoin:join];

执行查询

[query performQueryWithCompletionBlock:^(id result, NSError *error) {
    NSLog(@"%@", result);
}];

SOA RPC 调用

SOARPCCall *rpc = [[SOARPCCall alloc] init];
[rpc callProcedure:@"/authentication/login"
        parameters:@{@"email" : @"[email protected]", @"password" : @"passwd"}
           headers:nil
   completionBlock:^(id result, NSError *error) {
       NSLog(@"%@", result);
       NSLog(@"%@", error);
   }];

处理授权错误

从版本 0.1.3 开始,您可以使用 NSNotificationCenter 观察授权失败,通知名称为 SOAServiceAuthErrorNotification

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(selector:) name:SOAServiceAuthErrorNotification object:nil];