2016-08-24 12 views
0

AlamofireとiOSを使用してミドルウェアに類似したものを実装する方法があるかどうかを知りたいと思います。各Alamofireリクエストの前/後に関数を呼び出す

私はかなり似ているAPIコールをたくさん持っています。認証にはすべて有効なjson Webトークンが必要です。私はすべてのAPI呼び出しの前に同じ検証を実行したい、あるいはAPI呼び出しが失敗したときに同じ訂正アクションを取る。すべてのAPI呼び出しの最初または最後に同じチャンクをコピーして貼り付ける必要がないように設定できる方法はありますか?

+2

呼び出しているAlamofireメソッドの周りにラッパーを作成しますか? – nhgrif

答えて

2

ラッパークラス

あなたはあなたの要求のためのラッパーを作成することができます。

class AlamofireWrapper { 
    static func request(/*all the params you need*/) { 
     if tokenIsValidated() { //perform your web token validation 
      Alamofire.request//... 
      .respone { /*whatever you want to do with the response*/ } 
     } 
    } 
} 

同じコードをもう一度コピーして貼り付ける必要はありません。

AlamofireWrapper().request(/*params*/) 

拡張

これはテストされていません。あなたは

extension Alamofire { 
    func validatedRequest(/*all the params you need*/) { 
     if tokenIsValidated() { //perform your web token validation 
      Alamofire.request//... 
      .respone { /*whatever you want to do with the response*/ } 
     } 
    } 
} 

をAlamofire、あなたはすべてのコールに共通ヘッダを添付しようとしている場合は、この

Alamofire.validatedRequest(/*params*/) 
1

のようにそれを使用する拡張機能を追加することができ、あなたはAlamofire.manager。すべてAlamofire.requestを使用して設定することができます認証トークンのためにAlamofire.manager

var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:] 
defaultHeaders["Accept-Language"] = "zh-Hans" 

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
configuration.HTTPAdditionalHeaders = defaultHeaders 

let manager = Alamofire.Manager(configuration: configuration) 

の共通の共有インスタンスを使用し、私はすべての要求を実行するネットワーククラスでこのようにそれを行います。

func authHeaders() -> [String: String] { 
    let headers = [ 
     "Authorization": "Token \(UserManager.sharedInstance.token)", 
    ] 
} 
Alamofire.request(.GET, "https://myapi/user", headers: authHeaders()) 
    .responseJSON { response in 
     debugPrint(response) 
    } 
関連する問題