2016-08-24 6 views
0

Alamofire 및 iOS를 사용하여 미들웨어와 비슷한 것을 구현할 수 있는지 알고 싶습니다.각 Alamofire 요청 전/후에 함수 호출

저는 API 호출이 매우 유사하며 모두 인증을 위해 유효한 json 웹 토큰이 필요합니다. 모든 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 .ALL 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) 
    } 
관련 문제