YTKNetwork 的使用

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;    //當前請求,指定使用版本號的緩存數據


搬運工:https://github.com/yuantiku/YTKNetwork

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容