1.統一設置網絡請求的服務器和 CDN 的地址
YTKNetworkConfig *config = [YTKNetworkConfig sharedInstance];
config.baseUrl = @"http://yuantiku.com";
config.cdnUrl = @"http://fen.bi";
2.YTKRequest類 覆蓋以下方法
//拼接表示詳細的url
- (NSString *)requestUrl {
// “http://www.yuantiku.com” 在 YTKNetworkConfig 中設置,這里只填除去域名剩余的網址信息
return @"/iphone/register";
}
// 請求類型
- (YTKRequestMethod)requestMethod {
return YTKRequestMethodPost;
}
//post請求體
- (id)requestArgument {
return @{
@"username": _username,
@"password": _password
};
}
//驗證返回數據
- (id)jsonValidator {
return @{
@"nick": [NSString class],
@"level": [NSNumber class]
};
}
//設置一個3分鐘的緩存,3分鐘內調用調Api的start方法,實際上并不會發送真正的請求。
- (NSInteger)cacheTimeInSeconds {
// cache 3 minutes, which is 60 * 3 = 180 seconds
return 60 * 3;
}
//使用useCDN 地址請求
- (BOOL)useCDN {
return YES;
}
//上傳文件 我們可以通過覆蓋 constructingBodyBlock 方法,來方便地上傳圖片等附件,如下是一個示例:
- (AFConstructingBlock)constructingBodyBlock {
return ^(id<AFMultipartFormData> formData) {
NSData *data = UIImageJPEGRepresentation(_image, 0.9);
NSString *name = @"image";
NSString *formKey = @"image";
NSString *type = @"image/jpeg";
[formData appendPartWithFileData:data name:formKey fileName:name mimeType:type];
};
}
- (id)jsonValidator {
return @{ @"imageId": [NSString class] };
}
- (NSString *)responseImageId {
NSDictionary *dict = self.responseJSONObject;
return dict[@"imageId"];
}
//重寫 若這個方法返回非nil對象,會忽略requestUrl, requestArgument, requestMethod,requestSerializerType,requestHeaderFieldValueDictionary
- (NSURLRequest *)buildCustomUrlRequest {
NSData *rawData = [[_events jsonString] dataUsingEncoding:NSUTF8StringEncoding];
NSData *gzippingData = [NSData gtm_dataByGzippingData:rawData];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.requestUrl]];
[request setHTTPMethod:@"POST"];
[request addValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"];
[request setHTTPBody:gzippingData];
}
//設置請求頭
- (NSDictionary<NSString *,NSString *> *)requestHeaderFieldValueDictionary {
//設置通用header 簽名
return @{@"":@""};
}
3.其他類
/*請求多個類
YTKBatchRequest
*/
/*依賴請求
YTKChainRequest
*/
4.調用
//具體的方法是直接使用 YTKRequest 的 - (BOOL)loadCacheWithError: 方法,即可獲得上次緩存的內容。當然,你需要把 - (NSInteger)cacheTimeInSeconds 覆蓋,返回一個大于等于 0 的值,這樣才能開啟 YTKRequest 的緩存功能,否則默認情況下,緩存功能是關閉的。
NSString *userId = @"1";
GetUserInfoApi *api = [[GetUserInfoApi alloc] initWithUserId:userId];
if ([api loadCacheWithError:nil]) {
NSDictionary *json = [api responseJSONObject];
NSLog(@"json = %@", json);
// show cached data
}
[api startWithCompletionBlockWithSuccess:^(YTKBaseRequest *request) {
NSLog(@"update ui");
} failure:^(YTKBaseRequest *request) {
NSLog(@"failed");
}];
5.other
Override
- (NSInteger)cacheTimeInSeconds; //當前請求指定時間內,使用緩存數據
- (long long)cacheVersion; //當前請求,指定使用版本號的緩存數據