我想知道是否有使用Alamofire和iOS实现类似于中间件的东西。
我已经获得了大量非常相似的API调用,并且它们都需要有效的json Web令牌进行身份验证。我想在每次API调用之前执行相同的验证,或者在任何API调用失败时采取相同的纠正操作。有没有办法可以配置它,以便我不必将相同的代码块复制并粘贴到所有API调用的开头或结尾?
答案 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)
}