关于MKNetworking自己维护

时间:2021-07-23 21:43:39

关于MKNetworking自己维护

 

个人比较偏向MKNetworking, 因为在小项目里这个网络请求框架可以说是很轻量级。但是里边有一部分功能缺失或者是功能富余, 以及需要优化的地方。 所以决定自己来维护一个MK的repo以便自己使用。

GITHUB : MKNetworking-DLProtecting这里大家可以看到源码以及DEMO工程。

0.INIT

  • 创建Engin

    NSDictionary * customHeader = @{ @"version" : @"0.0.1", @"channel" : @"appleStore" }; MKNetworkEngine * engin = [[MKNetworkEngine alloc] initWithHostName:@"api.devdylan.com" apiPath:@"MKNetFrame" customHeaderFields:customHeader]; // 使用缓存 [engin useCache];
  • 创建Operation并添加回调
  • 执行

1.GET

    // - GET /DOWNLOAD - // // 使用operationWithPath: 创建operation, 会自动拼接engin的HOST与apiPath等 MKNetworkOperation * operation = [engin operationWithPath:@"Student.json" params:nil httpMethod:@"GET" ssl:NO]; // 使用operationWithURLString: 创建operation, 不会拼接engin的HOST与apiPath MKNetworkOperation * operation_url = [engin operationWithURLString:@"http://api.devdylan.com/MKNetFrame/Student.json" params:nil httpMethod:@"GET"]; NSLog(@"%@", operation.url); NSLog(@"%@", operation_url.url); [operation addCompletionHandler:^(MKNetworkOperation *completedOperation) { // 这里处理请求正确的时候 NSLog(@"%@", completedOperation.responseJSON); if ([completedOperation isCachedResponse]) { // 你现在得到的是缓存中的数据 } else { // 你现在得到的是服务器的数据 } } errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) { // 这里返回服务器级的错误或者是JSON解析等错误. NSLog(@"%@", completedOperation.error); }]; // 执行当前网络请求 [engin enqueueOperation:operation];

2.POST

    // - POST / UPLOAD - // MKNetworkOperation * operation_post = [engin operationWithPath:@"Student.json" params:nil httpMethod:@"POST" ssl:NO]; [operation_post addCompletionHandler:^(MKNetworkOperation *completedOperation) { // 这里处理请求正确的时候 NSLog(@"%@", completedOperation.responseJSON); } errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) { // 这里返回服务器级的错误或者是JSON解析等错误. NSLog(@"%@", completedOperation.error); }]; [engin enqueueOperation:operation_post forceReload:YES]; // 设置不读缓存

3.UPLOAD

    // 添加路径下文件 [operation_post addFile:@"FILE PATH" forKey:@"image.png"]; // 添加Data [operation_post addData:[NSData data] forKey:@"image2.png"]; [operation_post onUploadProgressChanged:^(double progress) { // 上传进度 }];

4.DOWNLOAD

    // 下载文件时, 添加下载流 [operation addDownloadStream:[NSOutputStream outputStreamToFileAtPath:@"downloadPath/image.png" append:YES]]; [operation onDownloadProgressChanged:^(double progress) { // 下载进度 }];

5.FORCELOAD

 [engin enqueueOperation:operation_post forceReload:YES]; // 设置不读缓存

6.FREEZABLE

// 设置当前operation冻结 [operation_post setFreezable:YES]; // 解除冻结 [operation_post setFreezable:NO];

7.OTHERS

    [operation_post onNotModified:^{ // 在服务器304时调用 }]; // 取消请求 [operation_post cancelOperation]; // 只在WIFI情况下请求, 默认为NO engin.wifiOnlyMode = YES; // 取消该引擎下所有的网络请求 [engin cancelAllOperation]; // 移除某一个网络请求 [engin removeOperation:operation_post]; // 清空缓存 [engin emptyCache]; [engin setReachabilityChangedHandler:^(NetworkStatus statu) { // 处理网络状态发生变化的回掉 }]; [operation_post setOperationStateChangedHandler:^(MKNetworkOperationState state) { // 当operation状态发生变化时回掉到这里 }];