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

Posted

技术标签:

【中文标题】在每个 Alamofire 请求之前/之后调用一个函数【英文标题】:Call a function before/after each Alamofire request 【发布时间】:2016-08-24 12:35:17 【问题描述】:

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

我有大量非常相似的 API 调用,它们都需要有效的 json Web 令牌进行身份验证。我想在每次 API 调用之前执行相同的验证,或者在任何 API 调用失败时交替采取相同的纠正措施。有没有一种方法可以配置它,这样我就不必将相同的代码块复制并粘贴到所有 API 调用的开头或结尾?

【问题讨论】:

围绕你调用的 Alamofire 方法创建一个包装器? 【参考方案1】:

包装类

您可以为您的请求创建一个包装器。

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*/)

【讨论】:

【参考方案2】:

如果您尝试将公共标头附加到所有调用,您可以使用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)
     

【讨论】:

以上是关于在每个 Alamofire 请求之前/之后调用一个函数的主要内容,如果未能解决你的问题,请参考以下文章

等待多个 Alamofire 请求完成

如何使用操作查询发出多个 Alamofire 请求

如何在 Alamofire 中的 sessionTask 恢复之前调用自定义方法

在 iOS 应用程序终止时处理 Alamofire 请求

在每个请求之前和之后运行的 PHP 函数或文件

对表格视图的每个单元格的 Alamofire 请求