在每个Alamofire请求之前/之后调用一个函数

时间:2016-08-24 12:35:17

标签: ios swift alamofire

我想知道是否有使用Alamofire和iOS实现类似于中间件的东西。

我已经获得了大量非常相似的API调用,并且它们都需要有效的json Web令牌进行身份验证。我想在每次API调用之前执行相同的验证,或者在任何API调用失败时采取相同的纠正操作。有没有办法可以配置它,以便我不必将相同的代码块复制并粘贴到所有API调用的开头或结尾?

2 个答案:

答案 0 :(得分: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*/)

<强>扩展

未经测试。您可以为Alamofire添加扩展程序

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.validatedRequest(/*params*/)

答案 1 :(得分: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)
     }