GLNetworking 2.11.1

GLNetworking 2.11.1

liguoliang 维护。



  • 作者
  • liguoliang

logo

GLNetworking

CI Status Version License Platform

在普通项目中,我们通常需要进行网络请求,无论是为了发送数据到服务器还是接收最新数据。 在进行请求时,我们希望用户更多地关注业务逻辑,而不是关注网络请求的代码。 因此,GLNetworking的目标是:更轻量更简洁更灵活。 基于这一点,我们开发了GLNetworking网络请求库,目前暂时基于AFN。

安装

GLNetworking 通过 CocoaPods 提供。 要安装,只需将以下行添加到您的 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一起使用)

更多示例

要运行示例项目,clone仓库,并首先从示例目录运行pod install

历史

  • 2.9.4 - 2020-12-31

    • 优化之前一个核心实例切换配置的问题。现在采用2个核心,分别处理不同的请求方案。
  • 2.9.3 - 2020-12-28

    • 修复:在GLRequest中赋值requestHeader时,如果数组项为空,则会导致崩溃的兼容性问题。
  • 2.9.1~2.9.2 - 2020-12-17

    • 改变引入方式。
    • 修复针对Manager配置的Bug。
  • 2.9.0 - 2020-12-16

    • GLNetworkProtocol:增加了服务器响应时stateCode和contentType是否允许的配置方案。
  • 2.8.3 - 2020-12-15

    • 针对可能存在的Bug,做容错处理。
  • 2.8.2 - 2020-12-14

    • 做了https基本容错。
  • 2.7.0 - 2020-06-02

    • 使用了AFN4+的版本,由于AFN3未使用UIWebView,无法进行提交。
  • 2.6.0 - 2020-04-10

    • 暂时修复已知问题:由于此项目暂时依赖AFN3.x,但目前最新版本为4.x不兼容3.x的内容,所以暂时锁定依赖版本为“低于4.0”。
  • 2.5.1 - 2020-04-03

    • 优化关于地址拼接部分逻辑。
    • 修复数据接收后的控制逻辑。
  • 2.5.0

    • 增加拦截的功能。现在可以拦截失败的请求,进行统一处理。
  • 2.1.1

    • 支持Json方式参数传递。
  • 2.1.0

    • 增加GraphQL支持。

要求

GLNetworking仅适用于Objective-C平台。

贡献者

liguoliang,[email protected]

许可证

GLNetworking遵循MIT许可证。有关更多信息,请参阅LICENSE文件。