为什么要对AFNetworking进行多一层的封装
对于AFNetworking进行二次封装是很有必要的。事实上,在项目中大量使用第三方网络库是有风险的,因为网络请求的使用遍布整个应用,而一旦该对应的网络库不再更新维护,或者我们有意愿的去更换网络框架,修改将会有着巨大的难以承受的工作量。
这一个框架与其他框架有什么不同
- 本框架基于AFNetworking3.0的版本进行封装,面向更新的版本。
- 为网络请求的任务管理做了大量的工作,使得下载上传,或者其他使用环境下的任务管理得以更轻松的实现。
- 反其道而行,专为Post请求作出了缓存处理,这一部分缓存处理的使用与否,由使用者自行决定。
- 自定义Get请求的缓存策略,以时间为基准,严格把控缓存的有效性。
接口设计
请求
这里使用了新建NS_ENUM的方式来统一Post和Get接口。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/** * 请求方式 */ typedef NS_ENUM(NSInteger, CBRequestType) { /** * POST方式来进行请求 */ CBPOSTRequest = 1 << 0, /** * GET方式来进行请求 */ CBGETRequest = 1 << 1 }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/** * 统一请求接口 * * @param url 请求路径 * @param params 拼接参数 * @param httpMethod 请求方式(0为POST,1为GET) * @param useCache 是否使用缓存 * @param progressBlock 进度回调 * @param successBlock 成功回调block * @param failBlock 失败回调block * * @return 返回的对象中可取消请求 */ + (CBURLSessionTask *)requestWithUrl:(NSString *)url params:(NSDictionary *)params useCache:(BOOL)useCache httpMedthod:(CBRequestType)httpMethod progressBlock:(CBNetWorkingProgress)progressBlock successBlock:(CBResponseSuccessBlock)successBlock failBlock:(CBResponseFailBlock)failBlock; |
从上面的代码我们可以看到,参数useCache决定着你是否使用Post请求的缓存功能,而即便将其设置为NO,依然会自动开启Get请求的缓存功能。
数据解析方式
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/** * 数据串行方式 */ typedef NS_ENUM(NSInteger, CBSerializerType) { /** * HTTP方式来进行请求或响应 */ CBHTTPSerializer = 1 << 0, /** * JSON方式来进行请求或响应 */ CBJSONSerializer = 1 << 1 }; |
1 2 3 4 5 6 7 8 |
/** * 更新请求或者返回数据的解析方式(0为HTTP模式,1为JSON模式) * * @param requestType 请求数据解析方式 * @param responseType 返回数据解析方式 */ + (void)updateRequestSerializerType:(CBSerializerType)requestType responseSerializer:(CBSerializerType)responseType; |
上面的NS_ENUM联合上面的方法可以更改数据解析方式,更具灵活性。
文件上传,下载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/** * 文件上传接口 * * @param url 传文件接口地址 * @param uploadingFile 上传文件路径 * @param progressBlock 上传进度 * @param successBlock 成功回调 * @param failBlock 失败回调 * Å
对于AFNetworking进行二次封装是很有必要的。事实上,在项目中大量使用第三方网络库是有风险的,因为网络请求的使用遍布整个应用,而一旦该对应的网络库不再更新维护,或者我们有意愿的去更换网络框架,修改将会有着巨大的难以承受的工作量。 这一个框架与其他框架有什么不同
接口设计请求
数据解析方式
文件上传,下载
|