[swift] Swift Moya에서 요청 인터셉터 구현하기

Swift Moya는 네트워크 요청을 쉽게 처리할 수 있게 도와주는 라이브러리입니다. 기본적으로 Moya는요청과 응답을 처리하는 과정에서 인터셉터 기능을 제공하지 않습니다. 하지만, 우리는 Swift Moya를 이용하여 요청 인터셉터를 구현할 수 있습니다.

요청 인터셉터란, 네트워크 요청이 보내지기 전에 요청에 대한 수정이나 로그를 남기는 등의 작업을 할 수 있는 기능을 말합니다. 이를 구현하기 위해서는 Moya의 Provider 클래스를 커스터마이징하여 요청 인터셉터를 추가해야 합니다.

먼저, Moya의 Provider 클래스를 상속받는 CustomProvider 클래스를 만들어보겠습니다.

import Moya

class CustomProvider<Target>: MoyaProvider<Target> where Target: TargetType {
    override func request(_ target: Target, callbackQueue: DispatchQueue? = .none, progress: ProgressBlock? = .none, completion: @escaping Completion) -> Cancellable {
        // 요청 전에 수행할 작업을 여기에 구현합니다.
        // 예를 들어, 요청 수정이나 로그 남기기 등을 수행할 수 있습니다.
        
        let modifiedTarget = // target 요청 수정
        let modifiedCallbackQueue = // callbackQueue 수정
        
        return super.request(modifiedTarget, callbackQueue: modifiedCallbackQueue, progress: progress, completion: completion)
    }
}

위의 코드에서 request(:callbackQueue:progress:completion:) 메서드를 오버라이딩하여 요청 전에 필요한 작업을 수행할 수 있도록 했습니다. 작업을 완료한 후에는 super.request(:callbackQueue:progress:completion:) 메서드를 호출하여 원래의 요청을 보내도록 합니다.

이제 CustomProvider를 사용하여 네트워크 요청을 보내는 곳에서 요청 인터셉터를 사용해보겠습니다.

let customProvider = CustomProvider<MyAPI>()
customProvider.request(.getUserInfo) { result in
    // 요청에 대한 응답을 처리하는 코드 작성
}

여기서 MyAPI는 Moya의 TargetType 프로토콜을 준수하는 enum입니다.

이렇게 하면 CustomProvider의 요청 인터셉터가 실행되어 원하는 작업을 수행한 후에 실제 요청이 보내지게 됩니다.

요청 인터셉터를 활용하여 네트워크 요청 전에 필요한 작업을 처리할 수 있습니다. 예를 들어, 요청의 헤더에 토큰을 추가하거나 요청 로그를 남길 수 있습니다.

추가적인 기능은 Moya에서 제공하는 문서를 참고하시기 바랍니다.

References