请求缓存:
一. 每次请求都有根用户信息有关的固定参数,我们称之为commonArgument,如
SessionID,CityId,Lat,Lng,DeviceID,Version,IsInHouse,devType,OS,AppVer,AppBuild等,具体如何获得的,以后再说。
主要方式是,根据请求的url生成一个字符串作为Key,Value是请求回来的数据。
Key的组成:
1.baseUrl和requestUrl,baseUrl可以在AFHTTPRequestOperationManager中设置,获取。
2.请求方法类型,get,post,delete等。
3.请求参数
4.版本信息
最后要把生成的url用md5加密便于管理。
主要是请求参数的处理:要不每次请求都带的参数去掉,这是多余的,
[dic removeObjectsForKeys:@[@"nonce", @"sign", @"time", @"token", @"SessionID", @"Lat", @"Lng",@"latitude",@"longitude"]];
二.NWCacheArgument 类
此类是用来封装缓存的一些信息,它包含要缓存的请求key,是否忽略缓存,是否支持离线缓存,以及缓存的时间。
@protocol NWCacheArgumentProtocol <NSObject>
- (void)cacheResponseWithIgnoreCache:(BOOL)ignoreCache
supportOffLine:(BOOL)supportOffLine
cacheTimeInSeconds:(NSInteger)cacheTimeInSeconds;
@end
@interface NWCacheArgument : NSObject<NWCacheArgumentProtocol>
@property (nonatomic, strong, readonly) NSString *key;
/** 忽略缓存直接请求*/
@property (nonatomic, assign) BOOL ignoreCache;
/** 是否支持离线缓存,默认不支持*/
@property (nonatomic, assign) BOOL supportOffLine;
@property (nonatomic, assign) NSInteger cacheTimeInSeconds;
- (id)initWithKey:(NSString *)key;
@end
对于此类,我们可以这么理解,一个请求对应一个CacheArgument,我们可以在这个缓存配置类中设置默认的一些配置。如果我想修改这些配置,怎么办呢?这就是上述这个代理的协议的作用,缓存配置类实现了自己的协议,那么我们就可以在调用请求的时候,传入一个Block,然后我们把新创建的缓存配置类作为此Block的参数,它当然就实现了这个协议,然后在block的回调内调用代理类方法。
根据路径判断缓存文件是否存在,如果不存在则表明没有缓存过,发送请求,如果存在,根据缓存文件最近一次的修改时间判断是否过期,如果过期则发送请求,如果没有,则读取NWCache,然后反解档并且封装NWResult
关于NWCache和NWResult以后再讨论。