Latest 1.0.0
Homepage https://github.com/Andy888888/Wq_RequestManager
License MIT
Platforms ios 7.0
Dependencies AFNetworking
Frameworks UIKit, Foundation
Authors
Base AFNetworking Core Network Request Framework

Logo

结构概览

1.ApiDelegate
2.AbsApi
3.BaseApi
4.BaseServiceManager
5.RequestManager

详解

1.ApiDelegate Protocal协议

该协议规范了凡遵守该协议的Api对象都拥有getReqUrl,getReqHeader,getReqBody,getRequestMethod,getTimeOut方法。这种设计方式借鉴了Java,C#语法的Interface接口的设计思想。

  • getReqUrl 用来配置请求地址Url,遵守者实现该方法需返回一个NSString对象。
  • getReqHeader 用来配置请求Header,遵守者实现该方法需返回一个NSDictionary对象。
  • getReqBody 用来配置请求Body,遵守者实现该方法需返回一个NSDictionary对象。
  • getRequestMethod用来配置该请求方式,目前设置了两种模式,用enum枚举RequestMethod来区分,可返回RequestMethodPOST(Post请求)或者RequestMethodGET(Get请求),其他的请求方式后期补充。
  • getTimeOut 用来配置请求超时时间。

2.AbsApi abstract抽象类

请求抽象类,规范了继承自AbsApi需要实现的方法。这种设计方式借鉴了Java,C#语法的abstract抽象类的设计思想。

  • getRootUrl 请求域名url。默认为nil,遵守实现者必须实现。
  • getPath 请求url后半部分。默认为nil,遵守实现者必须实现。
  • getBaseHeader 基本header。默认为nil,若有每个请求必填的header字段,请实现此方法。
  • getHeader 基本header以外的请求header。默认为nil,遵守实现者必须实现。
  • getBaseBody 基本body。默认为nil,若有每个请求必填的body字段,请实现此方法。
  • getBody 基本body以外的请求body。默认为nil,遵守实现者必须实现
  • getRespClass 用来指定该请求返回的数据实体Class,遵守者重写该方法需返回一个Class类型[Entity class],将返回的数据转换成指定数据实体对象。同时在同一页面中发起n个不同api请求后,返回的数据,我们可以通过class来区别。

3.BaseApi 请求Api基类

请求基类,继承自AbsApi,且遵守了ApiDelegate协议。
内部实现了ApiDelegate协议的方法,大家使用时直接继承BaseApi。而如果BaseApi如果不符合你的口味,你可以来自定义一个继承AbsApi又遵守BaseApiDelegate协议的对象

4.BaseServiceManager

用来使用AFNetWorking发送请求,只是个管理者,本身并不具备发送请求能力;目前依赖于AFNetWorking来发送网络请求;在内部封装了一些默认创建AFHTTPSessionManager的方法。

/// 使用block方式发送数据请求;api:发送参数,sucBlock:成功回调,failBlock:失败回调
- (void)sendRequest:(AbsApi<ApiDelegate>*)api
           sucBlock:(ResponseSuccessBlock)sucBlock
           failBlock:(ResponseFailureBlock)failBlock;

该方法使用Block回调来发送请求,api参数为继承AbsApi抽象类,且遵守ApiDelegate协议的对象,(PS:BaseApi就符合该约束,凡继承BaseApi的对象都符合该参数约束) BaseServiceManager内部通过api对象配置来发送请求。sucBlockfailBlock为请求成功/失败回调。

5.RequestManager

继承自BaseServiceManager;设计此Manager主要目的是,后期不采用AFNetWorking时,可在本类的发送方法sendRequest…中切换其他第三方请求框架即可,而不需要项目中到处修改AFNetWorking请求为其他方式请求,同时担任着控制第三方请求的角色;因此,即使看不惯本类,也不要修改;另外,本类增加了Protocal回调数据方式请求。

/// ResponseDelegate 数据响应回调协议
@property (nonatomic,assign) id<ResponseDelegate> delegate;

+ (id)initManagerWithDelegate:(id<ResponseDelegate>)delegate;
/// 发送数据请求,参数为继承AbsApi抽象类,且遵守BaseApiDelegate协议 的对象
- (void)sendRequest:(AbsApi<ApiDelegate>*)api;

我们可以直接使用initManagerWithDelegate:方法来初始化RequestManager对象,将数据回调协议delegate传入。
使用sendRequest:方法来发送请求,同父类一致,api参数为继承AbsApi抽象类,且遵守BaseApiDelegate协议的对象。而上述BaseApi就符合这一点,而BaseApi如果不符合你的口味,你可以来自定义一个继承AbsApi又遵守BaseApiDelegate协议的对象。

Latest podspec

{
    "name": "Wq_RequestManager",
    "version": "1.0.0",
    "summary": "Base AFNetworking Core Network Request Framework.",
    "description": "u57fau4e8eAFNetworkingu4f5cu4e3au7f51u7edcu8bf7u6c42u6838u5fc3uff0cu5c01u88c5u7684u4e00u4e2au7f51u7edcu8bf7u6c42u6846u67b6u3002u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11,u8bf4u63cfu8ff0u4fe1u606fu4e0du80fdu6bd4u6982u8ff0u5c11.",
    "homepage": "https://github.com/Andy888888/Wq_RequestManager",
    "license": "MIT",
    "authors": {
        "u71d5u6587u5f3a": "[email protected]"
    },
    "platforms": {
        "ios": "7.0"
    },
    "source": {
        "git": "https://github.com/Andy888888/Wq_RequestManager.git",
        "tag": "1.0.0"
    },
    "source_files": "AF_RequestManager/RequestManager/*.{h,m}",
    "exclude_files": "Classes/Exclude",
    "frameworks": [
        "UIKit",
        "Foundation"
    ],
    "dependencies": {
        "AFNetworking": [
            "~> 3.1.0"
        ]
    }
}

Pin It on Pinterest

Share This