iOS平臺調用後臺接口的正確姿式

前言

作iOS開發,除非你作的是單機應用,不然必定避免不了接口調用,也就是所謂的API調用。git

而對於這方面,每一個公司定義接口的格式不盡相同,從而致使咱們的代碼無法達到通用。github

甚至你接私活的話,更會遇到五花八門的接口格式。那麼有沒有一種通用的方式來處理這些不通用的格式呢?json

我嘗試從變化的接口格式中找到不變的東西,把這些不變的東西進行可配置,從而造成以不變應萬變的接口調用方式。bash

這些不變的東西,包括以下幾種:網絡

  • 錯誤碼
  • 錯誤消息
  • 業務數據

而對於錯誤碼又能夠分以下幾類:app

  • 成功
  • 失敗
  • token失效

基於以上的分析,造成了一個開源庫,但願能在必定程度上方便你們的開發。 開源地址:github.com/wochen85/FK…post

下面進行使用的詳細說明:spa

FKApiInvoker

iOS 平臺網絡接口調用封裝code

安裝

pod 'FKApiInvoker'
複製代碼

使用

1. 初始化配置,能夠放在Appdelegate的- (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失效,跳轉登陸頁面
    };
複製代碼

2. 調用後臺API

[FKApiInvoker fire:@"post" path:@"/personinfo/login" param:nil headers:headers body:body responseModelClass:[LoginResp class] success:^(LoginResp* model) {
        //成功處理
    } failure:^(NSError *error) {
        //失敗處理
    }];
複製代碼

3. 使用mock數據

[FKApiInvoker fireWithMockData:mockData method:@"post" path:@"/personinfo/login" param:nil headers:headers body:body responseModelClass:[LoginResp class] success:^(LoginResp* model) {
        //成功處理
    } failure:^(NSError *error) {
        //失敗處理
    }];
複製代碼

其餘狀況

1. 後臺返回的業務數據和錯誤碼、錯誤消息平級:

{"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

2. 若是通用頭在初始化配置以後可能發生變化,這種狀況常見於用戶登陸以後,通用頭裏面須要加入形如token的字段

那麼調用以下方法:

[[FKApiInvoker sharedInvoker] configCommonHeaders:@{@"token": @"token string"}];
複製代碼

3. 須要作其餘更加靈活的json格式的http請求?

能夠直接使用我寫的另外一個庫: JsonModelHttp

事實上FKApiInvoker底層也是依賴的JsonModelHttp.

相關文章
相關標籤/搜索