厚积薄发-网络层架构
基于networking 框架 在项目中实践并得以应用。
随着项目的体积越来越大,业务扩展越来越高,网络层出现了一下几种问题。
1.项目中,所有的接口Api 写着了一个.h文件里,体积庞大,查找不方便。
2.当api更改参数时,修改不方便,有可能会漏掉。
3.每次进行网络请求,都需要判断state == 1,从而进行业务判断。
4.处理网络请求自动取消机制,当vc消失时,网络请求应当自动取消。
因此,我们需要实现以下目标:
1.单一模块管理自己独立的api
2.多项目之间 头信息、公共参数可配置
3.参数和api接口统一维护管理
demo:networking 是怎么解决这个问题的呢?
![](https://images2015.cnblogs.com/blog/1001606/201702/1001606-20170220210208023-989399044.png)
借鉴networking 实现公司的网络层架构。
流程:(举例 空间模块 获取粉丝列表)XLZoneApi 中,实现
![](https://images2015.cnblogs.com/blog/1001606/201702/1001606-20170220210349101-665379236.png)
将调接口的vc,所有的参数、model、成功和失败的回调, 都在其中实现。 调用XLBaseApi 接口。
在XLBaseApi中,实现 get post 上传 等方法封装和定义。然后将参数进行model封装:
![](https://images2015.cnblogs.com/blog/1001606/201702/1001606-20170220210421804-2094380529.png)
3.将model 交给XLApiManager ,XLApiManager 实现真正的网络请求。
其中遇到一个坑,是进行post上传时,需要填写表单,需要用到如下方法。 但平常的post请求,是不需要表单的,如果用下面的方法,会导致请求错误。所以采取了,根据不同的方式,进行不一样的post请求。
- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
progress:(nullable void (^)(NSProgress * _Nonnull))uploadProgress
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
parameters:(id)parameters
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
progress:(nullable void (^)(NSProgress * _Nonnull))uploadProgress
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
4.在XLBaseApi 中,处理返回的json ,并以model的形式返回,在这里 处理了state ==1 的形式。
![](https://images2015.cnblogs.com/blog/1001606/201702/1001606-20170220210546663-255637265.png)
跟networking 的不同
1.YAAPIURLRequestGenerator 在这里配置request 对应的URL 请求方式 参数parameters formData 等
XLURLRequestGenerator 我们大多的请求 没有采用request 方式,而是用AFHTTPSessionManager 进行网络请求。
所以在这个类中,以model的形式,返回URL,parameters。
2.为了更好的扩展,在XLBaseApi 封装好的model 传递给XLApiManager 时,采取了协议。
根据delegate的不同,在不同的类中,实现各自的策略。
3.在apiManager 中,对外开放
![](https://images2015.cnblogs.com/blog/1001606/201702/1001606-20170220210616523-1820810452.png)
如果请求头中,以便不满足需求。