[swift] Swift Moya에서 인증 처리하기

Moya는 Swift에서 API 호출을 쉽게 관리할 수 있는 라이브러리입니다. 이 라이브러리를 사용하면 네트워크 요청을 간단하게 작성하고, 응답을 처리하는데 도움을 받을 수 있습니다. 이번에는 Moya를 사용하여 API 요청 시 인증 처리하는 방법에 대해 알아보겠습니다.

1. 인증 헤더 추가하기

API 호출 시에는 보통 인증 정보를 포함한 헤더를 함께 전송해야 합니다. Moya에서는 EndpointEndpointClosure를 사용하여 인증 헤더를 추가할 수 있습니다.

import Moya

let myAPI = MoyaProvider<MyService>(endpointClosure: { (target: MyService) -> Endpoint in
    let defaultEndpoint = MoyaProvider.defaultEndpointMapping(for: target)
    return defaultEndpoint.adding(newHTTPHeaderFields: ["Authorization": "Bearer YOUR_AUTH_TOKEN"])
})

위의 예제에서는 MyService라는 API 서비스를 MoyaProvider로 초기화하고, endpointClosure를 사용하여 기본 엔드포인트에 Authorization 헤더를 추가하였습니다.

2. 인증 토큰 갱신하기

일부 API는 인증 토큰의 만료 시간이 정해져있거나, 재발급이 필요한 경우가 있습니다. 이런 경우에는 인증 토큰을 갱신하는 과정이 필요합니다.

Moya에서는 PluginType을 사용하여 요청 전/후에 동작하는 플러그인을 만들 수 있습니다. 이를 활용하여 토큰 갱신을 처리할 수 있습니다.

import Moya

class TokenPlugin: PluginType {
    
    func prepare(_ request: URLRequest, target: TargetType) -> URLRequest {
        var request = request
        
        // 인증 토큰 재발급 로직 구현
        
        return request
    }
}

let tokenPlugin = TokenPlugin()

let myAPI = MoyaProvider<MyService>(plugins: [tokenPlugin])

위의 예제에서는 TokenPlugin이라는 플러그인을 생성하고, prepare(_:target:) 메소드를 구현하여 요청 전에 동작하는 로직을 추가하였습니다. 이곳에서 인증 토큰을 갱신하는 로직을 구현하면 됩니다.

3. 에러 처리하기

API 호출 시에는 인증 에러, 네트워크 에러 등 다양한 오류가 발생할 수 있습니다. Moya는 이러한 오류를 처리하기 쉽도록 도와줍니다.

let myAPI = MoyaProvider<MyService>(plugins: [NetworkLoggerPlugin()])

myAPI.request(.getUserInfo) { result in
    switch result {
    case .success(let response):
        // 응답 처리
    case .failure(let error):
        // 에러 처리
    }
}

위의 예제에서는 MoyaProvider에서 request(_:completion:) 메소드를 사용하여 API를 호출하였습니다. 이 때, 결과는 Result<Response, MoyaError> 형태로 받을 수 있으며, 각 상황에 따라 적절한 처리를 할 수 있습니다.

결론

Moya를 사용하여 API 호출 시 인증 처리를 하는 방법에 대해 알아보았습니다. 인증 헤더 추가, 인증 토큰 갱신, 에러 처리에 대해 예제를 통해 설명하였으니 참고하시기 바랍니다. Moya를 사용하여 깔끔하고 효율적인 API 호출 처리를 할 수 있습니다.


참고 자료