每个网络请求一般都会具备URL、参数、请求头和get与post的选择。在OC中,我是这样封装的:
#import "AFHTTPSessionManager+Util.h"
@implementation AFHTTPSessionManager (Util)
/**
网络请求封装
@param type 请求类型
@param urlStr URL
@param parameters 参数
@param success 与后台交互成功的回调
@param failure 与后台交互失败的回调
*/
+ (void)requestWithType:(AFHTTPSessionManagerRequestType)type URLString:(NSString *)urlStr parameters:(id)parameters success:(void (^)(NSURLSessionDataTask * task, id responseObj))success failure:(void (^)(NSURLSessionDataTask * task, NSError * error))failure
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain",@"text/html",@"application/json", nil];
// 设置请求头
[manager.requestSerializer setValue:[Management getUniqueDeviceID] forHTTPHeaderField:@"CLIENT"];
if ([User sharedSingleton].token) {
[manager.requestSerializer setValue:[User sharedSingleton].token forHTTPHeaderField:@"TOKEN"];
}
// 请求类型
if (type == AFHTTPSessionManagerRequestTypeGet) {
[manager GET:urlStr parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
success(task,responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failure(task,error);
}];
}else if(type == AFHTTPSessionManagerRequestTypePost){
[manager POST:urlStr parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
success(task,responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failure(task,error);
}];
}
}
@end
在swift中,你们用Alamofire是怎样封装的?希望可以分享下。
首先,将 API 所有接口定义到一个单独文件中进行管理:
然后,用单例模式实现 HTTP 请求工具:
最后,拓展一些可能常用的接口,例如登录、退出、权限验证: