作iOS開發,除非你作的是單機應用,不然必定避免不了接口調用,也就是所謂的API調用。git
而對於這方面,每一個公司定義接口的格式不盡相同,從而致使咱們的代碼無法達到通用。github
甚至你接私活的話,更會遇到五花八門的接口格式。那麼有沒有一種通用的方式來處理這些不通用的格式呢?json
我嘗試從變化的接口格式中找到不變的東西,把這些不變的東西進行可配置,從而造成以不變應萬變的接口調用方式。bash
這些不變的東西,包括以下幾種:網絡
而對於錯誤碼又能夠分以下幾類:app
基於以上的分析,造成了一個開源庫,但願能在必定程度上方便你們的開發。 開源地址:github.com/wochen85/FK…post
下面進行使用的詳細說明:spa
iOS 平臺網絡接口調用封裝code
pod 'FKApiInvoker'
複製代碼
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions
方法中,或者其餘你認爲合適的地方,假設後臺返回的json格式以下:token
{"code":0,
"msg":"成功",
"data":{"name":"CHAT",
"age":18}}
複製代碼
其中 code是錯誤碼(0表明處理成功,127表明token過時),msg是提示消息,data 是具體的業務數據
那麼作以下配置:
FKApiInvokerConfig* config = [[FKApiInvokerConfig alloc] initWithBaseUrls:@[@"http://www.httpbin.org",@"http://www.httpbin.org",@"http://www.httpbin.org",@"http://www.httpbin.org"] commonHeaders:@{@"test": @"test"} respCodeKey:@"code" respMsgKey:@"msg" respDataKey:@"data" successCode:0 tokenExpiredCode:127];
[[FKApiInvoker sharedInvoker] configInvoker:config];
[FKApiInvoker sharedInvoker].tokenExpiredBlk = ^{
//token失效,跳轉登陸頁面
};
複製代碼
[FKApiInvoker fire:@"post" path:@"/personinfo/login" param:nil headers:headers body:body responseModelClass:[LoginResp class] success:^(LoginResp* model) {
//成功處理
} failure:^(NSError *error) {
//失敗處理
}];
複製代碼
[FKApiInvoker fireWithMockData:mockData method:@"post" path:@"/personinfo/login" param:nil headers:headers body:body responseModelClass:[LoginResp class] success:^(LoginResp* model) {
//成功處理
} failure:^(NSError *error) {
//失敗處理
}];
複製代碼
{"code":0,
"msg":"成功",
"name":"CHAT",
"age":18}
複製代碼
則在初始化配置的時候改爲這種:
FKApiInvokerConfig* config = [[FKApiInvokerConfig alloc] initWithBaseUrls:@[@"http://www.httpbin.org",@"http://www.httpbin.org",@"http://www.httpbin.org",@"http://www.httpbin.org"] commonHeaders:@{@"test": @"test"} respCodeKey:@"code" respMsgKey:@"msg" respDataKey:nil successCode:0 tokenExpiredCode:127];
[[FKApiInvoker sharedInvoker] configInvoker:config];
[FKApiInvoker sharedInvoker].tokenExpiredBlk = ^{
//token失效,跳轉登陸頁面
};
複製代碼
即respDataKey參數傳nil
token
的字段那麼調用以下方法:
[[FKApiInvoker sharedInvoker] configCommonHeaders:@{@"token": @"token string"}];
複製代碼
能夠直接使用我寫的另外一個庫: JsonModelHttp
事實上FKApiInvoker底層也是依賴的JsonModelHttp.