https://github.com/jdongkhan/jdnetwork
iOS对网络的封装支持链式调用,支持拦截器定制各种需求
https://github.com/jdongkhan/jdnetwork
afnetworking ios objective-c
Last synced: 9 months ago
JSON representation
iOS对网络的封装支持链式调用,支持拦截器定制各种需求
- Host: GitHub
- URL: https://github.com/jdongkhan/jdnetwork
- Owner: JDongKhan
- Created: 2017-07-21T08:24:28.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2019-08-20T01:02:45.000Z (over 6 years ago)
- Last Synced: 2025-03-28T17:47:25.630Z (10 months ago)
- Topics: afnetworking, ios, objective-c
- Language: Objective-C
- Homepage:
- Size: 3.74 MB
- Stars: 3
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# JDNetwork
基于AFNetworking封装的链式网络请求
PS:出于兴趣写点快速开发的组件。
## 优势
### 一、使用方便
-- 链式调用
-- 方法简洁
### 二、支持拦截器
可以通过拦截器做很多工作,比如
1、登陆拦截
2、日志、统计
3、缓存
4、自定义解析:拦截器也可以做数据处理的工作
5、等等
### 三、不影响主线程
拦截器会在单独的队列里面运行,你可以做你想做的任何事,比如文件先压缩再解压这种没脑子的事情都可以。
### 四、支持Cache
缓存策略分:
JDNetworkCachePolicyIgnored:没有缓存
JDNetworkCachePolicyLoadCacheOnlyAtFirstTimeAndAlwaysRequest:先加载缓存后请求
JDNetworkCachePolicyDoesNotRequestWithinDuration:使用缓存不再请求
### 五、结构清晰
该项目共分为五小模块(每个模块都很小,所以是小模块)
1、Operation:核心网络请求逻辑都在这里
2、Interceptor:拦截器
3、Cache:基于拦截器实现的缓存模块
4、Entity:自定义的request、response等,方便管理与使用,是网络使用配置的承载体
5、JDNetwork:该类是一个语法糖类,里面包含了很多常用的功能。比如
5.1、timeoutInterval:超时设置
5.2、parameterEncoding:请求格式
5.3、responseEncoding:响应格式
5.4、parameters:参数设置
5.5、get/post/delete/put/head:http请求方法
5.6、successResponse/errorResponse:成功、失败回调
5.7、其他
### 六、易扩展
通过拦截器可以很容易扩展功能
项目中的缓存、登录检测、日志、解析等模块就很容易实现
## Demo
```objc
//最简单的写法
- (IBAction)requestAction1:(id)sender {
JDNetwork
.POST(@"https://baidu.com")
.parameters(@{
@"username" : @"jd"
})
.start();
}
//登录拦截器
- (IBAction)requestAction2:(id)sender {
JDNetwork
.GET(@"https://baidu.com")
.addInterceptor([[LoginInterceptor alloc] init])
.responseEncoding(JDNetworkResponseXMLParserEncoding)
.success(^(id result) {
})
.error(^(NSError *error) {
})
.start();
}
//缓存拦截器
- (IBAction)requestAction3:(id)sender {
JDNetwork
.GET(@"https://baidu.com")
.cachePolicy(JDNetworkCachePolicyLoadCacheOnlyAtFirstTimeAndAlwaysRequest)
.responseEncoding(JDNetworkResponseXMLParserEncoding)
.success(^(id result) {
})
.error(^(NSError *error) {
})
.start();
}
//登录+缓存拦截器
- (IBAction)requestAction4:(UIButton *)sender {
JDNetwork
.GET(@"https://baidu.com")
.addInterceptor([[LoginInterceptor alloc] init])
.addInterceptor([[HttpLoggingInterceptor alloc] init])
.addInterceptor([[XMLInterceptor alloc] init])
.cachePolicy(JDNetworkCachePolicyLoadCacheOnlyAtFirstTimeAndAlwaysRequest)
.responseEncoding(JDNetworkResponseXMLParserEncoding)
.success(^(id result) {
})
.error(^(NSError *error) {
})
.start();
}
- (IBAction)requestAction5:(id)sender {
NSString *url = @"/api/openapi/BaikeLemmaCardApi";
JDNetworkManager.baiduService
.GET(url)
.parametersForKey(@"scope", @"103")
.parametersForKey(@"format", @"json")
.parametersForKey(@"appid", @"379020")
.parametersForKey(@"bk_key", @"haha")
.parametersForKey(@"bk_length", @"600")
.cachePolicy(JDNetworkCachePolicyLoadCacheOnlyAtFirstTimeAndAlwaysRequest)
.success(^(id result) {
})
.error(^(NSError *error) {
})
.start();
}
```