厚积薄发-网络层架构

基于networking 框架 在项目中实践并得以应用。
 
随着项目的体积越来越大,业务扩展越来越高,网络层出现了一下几种问题。
1.项目中,所有的接口Api 写着了一个.h文件里,体积庞大,查找不方便。
2.当api更改参数时,修改不方便,有可能会漏掉。
3.每次进行网络请求,都需要判断state == 1,从而进行业务判断。
4.处理网络请求自动取消机制,当vc消失时,网络请求应当自动取消。
因此,我们需要实现以下目标:

 1.单一模块管理自己独立的api

 2.多项目之间 头信息、公共参数可配置

 3.参数和api接口统一维护管理

 
demo:networking 是怎么解决这个问题的呢?

 

 

借鉴networking 实现公司的网络层架构。

流程:(举例 空间模块 获取粉丝列表)XLZoneApi 中,实现

将调接口的vc,所有的参数、model、成功和失败的回调, 都在其中实现。 调用XLBaseApi 接口。

XLBaseApi中,实现 get post 上传 等方法封装和定义。然后将参数进行model封装:

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
4.在XLBaseApi 中,处理返回的json ,并以model的形式返回,在这里 处理了state ==1 的形式。
跟networking 的不同
1.YAAPIURLRequestGenerator 在这里配置request  对应的URL 请求方式 参数parameters formData 等
XLURLRequestGenerator 我们大多的请求 没有采用request 方式,而是用AFHTTPSessionManager 进行网络请求。
所以在这个类中,以model的形式,返回URL,parameters。
2.为了更好的扩展,在XLBaseApi 封装好的model 传递给XLApiManager 时,采取了协议。
根据delegate的不同,在不同的类中,实现各自的策略。
3.在apiManager 中,对外开放

如果请求头中,以便不满足需求。

 

 

 

posted @ 2017-02-20 21:07  我是你们最爱的硕哥  阅读(409)  评论(0编辑  收藏  举报