RestKit,拦截失败的请求/重试,如果它是由于令牌过期引起的

时间:2016-07-12 18:51:21

标签: ios restkit objective-c-blocks

我有一个名为API助手的类,其方法如下所示:

+(RKObjectManager*) getRestObjectManager{
    NSURL *baseURL = [NSURL URLWithString:BASE_URL];
    AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
    // initialize RestKit
    RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];

    return objectManager;
}

我将创建类似API_User,API_Group等的类。这些类中的每一个都将具有类似

的方法
+(void)getDetails:(void (^)(User* user) )onSuccess{

    //fetch object manager from api helper and perform request, on success, call the onSuccess block from the function parameter. 

    onSuccess(user); //if it was successful, i will create a user object and //return. 

}

将有几种方法,如getDetails,每种方法都需要发送身份验证令牌才能工作。令牌可能会过期,需要刷新。

我如何:

在API帮助器中定义某种拦截器,这样当请求失败时,它将获取一个新令牌(我的令牌过期响应本身提供了一个新令牌),并重试失败的请求?我不想为我定义的每个端点处理这个问题。

1 个答案:

答案 0 :(得分:0)

我所做的是扩展RKObject管理器并在那里处理失败:

@implementation MYOWNObjectManager

#pragma mark - RKObjectManager Overrides
- (void)getObjectsAtPath:(NSString *)path parameters:(NSDictionary *)parameters success:(void (^)(RKObjectRequestOperation *operation, 
RKMappingResult *mappingResult))success failure:(void (^)(RKObjectRequestOperation *operation, NSError *error))failure {  
    [super getObjectsAtPath:path parameters:parameters success:success failure:^(RKObjectRequestOperation *operation, NSError *error) {
//check if failure was due to token expiry, if yes call the code to refresh token. otherwise just call   failure(operation, error);

[super getObjectsAtPath:path parameters:parameters success:success failure:failure]; //this line performs the request again. 
    }];
}

此代码段仅供GET使用。您还需要使用相同的逻辑

覆盖PUT / POST等