在一般的项目中,我们都需要进行网络请求,无论是为了发送数据给服务器还是接收最新的数据。
而且在请求的时候,我们希望使用者不再着重关注网络请求代码内容,而是把更多的精力放到业务逻辑上。
所以GLNetworking的目标是:更轻量
,更简洁
,更灵活
。基于此实现了GLNetworking网络请求库,目前暂时基于AFN。
GLNetworking is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'GLNetworking'
#pod 'GLNetworking/Cache'
#pod 'GLNetworking/GraphQL'
XXConfig.h
#import <GLNetworkPotocol.h>
@interface XXConfig : NSObject <GLNetworkPotocol>
@end
XXConfig.m
@implementation XXConfig
/** host地址 */
- (NSString *)requestHost;
/** 设置请求头, 可根据 请求path 来更改 */
- (NSDictionary *)requestHeaderWithPath:(NSString *)path;
@optional
/** 使用JSON格式进行body传递, 默认NO, 且自动在请求头中追加"Content-Type":"Application/Json" */
- (BOOL)isJsonParams;
/** 超时时长(秒), 默认:10*/
- (NSTimeInterval)requestTimeout;
/** 是否输出Debug信息, 默认:NO*/
- (BOOL)isDebugMode;
/** 缓存名单 */
- (NSSet *)cacheList;
/**
* @brief 加密(编码方案)
* @return 加密后的值,供网络请求使用
* @param params 即将进行请求的加密前参数列表
* @param path 请求时的接口路径, 可作为Key使用
* @discussion
* 由于加密和解密一般成对出现,且各个项目可能使用的方案不同。所以此方法留给使用者自己定义。
*/
- (id)paramsProcessedWithOriginParams:(NSDictionary *)params path:(NSString *)path;
/**
* @brief 解密
* @return 解密后的值,供网络请求使用
* @param response 服务器返回头信息
* @param data 服务器返回数据
* @discussion
* 由于加密和解密一般成对出现,且各个项目可能使用的方案不同。所以此方法留给使用者自己定义。通过data接收服务器的加密后的信息,然后进行解密后返回。
*/
- (id)responseObjectForResponse:(NSHTTPURLResponse *)response data:(NSData *)data;
/**
* @brief 请求成功后进行拦截调用(此方法在子线程被执行)
* @return
* 为空 : 直接回到成功;
* @return
* 不为空 : 说明进行了处理,返回用户定义的Error或请求的系统的Error;
* @param response 服务器返回头信息
* @param data 服务器返回数据
* @discussion
* 1. 如果请求发送出去,中间产生网络错误,则不会进入此方法,直接返回Failed。
* @discussion
* 2. 如果没有产生网络错误,但是返回的数据内有需要进行判断的内容,则需要实现此方法,并依据数据(data参数),进行判断,是否需要返回Error信息。
* @warning 定义ErrorCode时尽量避免如下区间:-1,-999,-1000~-1120,-1200~-1206,-2000,-3000~-3007 (详见:NSURLError.h)
*/
- (NSError *)interceptWithURLResponse:(NSHTTPURLResponse *)response success:(id)data;
//- (BOOL)invocationAfterRequestWS:(NSString *)webserviceORpath success:(id)response toUserFailedInfo:(NSDictionary *__autoreleasing *)userInfo;
/** HTTPS local server */
- (AFSecurityPolicy *)developmentServerSecurity;
...
@end
在调用网络请求之前进行初始化,一般可以放到AppDelegate.m
中
...
[GLNetworking managerWithConfig:[XXConfig new]];
...
GET请求
:...
[GLNetworking.GET().path(@"app/interfaceA") success:nil failure:nil complete:nil];
...
POST请求
:...
/* params(NSDictionary<NSString *, NSString *> *p) */
[GLNetworking.POST().path(@"app/interfaceA").params(@{@"city":@"Beijing",@"zip":@"100000"}) success:nil failure:nil complete:nil];
...
...
[GLNetworking.GET().path(@"app/interfaceA") success:^(NSURLResponse *header, id response) {
// header : response header
// response : response data
} failure:^(NSError *error, NSURLResponse *response, id data) {
// error : 错误信息。
// response : 服务器返回头。如果进行了请求返回拦截,并改变了返回,此值不为空
// data : 服务器返回数据。如果进行了请求返回拦截,并改变了返回,此值不为空
complete:^{
// 网络请求完成后执行 (无论 suc 或 fad 均为执行成功)
}];
...
其他请求方法组建部分
.customURL(NSString *)
:自定义URL地址.config(id<GLNetworkProtocal>)
:自定义Config文件.priority(GLPriority)
:自定义优先级.encode(BOOL)
:是否启用编码(需配合config重写编码方法使用).decode(BOOL)
:是否启用解码(需配合config重写编码方法使用).webService(NSString *)
:对应其他类型请求(接口采用参数形式).ignoreCache(BOOL)
:忽略网络请求缓存(需配合config的cacheList使用)To run the example project, clone the repo, and run pod install
from the Example directory first.
2.11.1 - 2021-09-03
2.11.0 - 2021-07-19
2.10.0 - 2021-06-25
2.9.4 - 2020-12-31
2.9.3 - 2020-12-28
2.9.1~2.9.2 - 2020-12-17
2.9.0 - 2020-12-16
GLNetworkProtocol
:增加了服务器响应时stateCode和contentType是否允许的配置方案2.8.3 - 2020-12-15
2.8.2 - 2020-12-14
2.7.0 - 2020-06-02
2.6.0 - 2020-04-10
2.5.1 - 2020-04-03
2.5.0
2.1.1
2.1.0
GLNetworking only User on the Objective-C platform.
liguoliang, 36617161@qq.com
GLNetworking is available under the MIT license. See the LICENSE file for more info.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。