[swift] Moya와 ObjectMapper를 사용하여 API 요청과 응답 처리 구현

이번 포스트에서는 Moya와 ObjectMapper를 함께 사용하여 Swift에서 API 요청 및 응답 처리를 어떻게 구현하는지 알아보겠습니다.

Moya란?

Moya는 Alamofire를 기반으로 하여 Swift에서 네트워크 작업을 추상화하는 라이브러리입니다. Moya는 네트워크 통신에 필요한 동작을 추상화해주기 때문에 코드를 간결하게 작성할 수 있습니다.

Moya를 사용하기 위해서는 먼저 필요한 패키지를 설치해야 합니다. 터미널에서 다음 명령어를 실행하여 Moya를 설치합니다.

$ pod 'Moya'

설치가 완료되었다면, 프로젝트의 Podfile에 Moya를 추가한 뒤 pod install 명령어를 실행하여 종속성을 설치합니다.

ObjectMapper란?

ObjectMapper는 Swift에서 JSON 데이터를 매핑하기 위한 라이브러리입니다. ObjectMapper는 JSON 데이터를 간단한 코드로 매핑하여 사용할 수 있도록 도와줍니다.

ObjectMapper를 사용하기 위해서는 먼저 필요한 패키지를 설치해야 합니다. 터미널에서 다음 명령어를 실행하여 ObjectMapper를 설치합니다.

$ pod 'ObjectMapper'

설치가 완료되었다면, 프로젝트의 Podfile에 ObjectMapper를 추가한 뒤 pod install 명령어를 실행하여 종속성을 설치합니다.

Moya와 ObjectMapper를 함께 사용하기

  1. 먼저 Moya의 provider를 생성합니다. Provider를 생성할 때는 Moya의 enum 타입에 해당하는 Target을 사용하여 생성합니다. Target은 API 요청에 필요한 정보를 담고 있습니다.
import Moya

let provider = MoyaProvider<API>()
  1. API 타겟을 정의합니다. API 타겟은 Moya의 Target 프로토콜을 채택하여 구현합니다. 여기서는 GET 메서드를 사용하여 /users API를 호출하는 예제를 보겠습니다.
import Moya

enum API {
    case getUsers
}

extension API: TargetType {
    var baseURL: URL {
        return URL(string: "https://api.example.com")!
    }
    
    var path: String {
        switch self {
        case .getUsers:
            return "/users"
        }
    }
    
    var method: Moya.Method {
        switch self {
        case .getUsers:
            return .get
        }
    }
    
    var sampleData: Data {
        return Data()
    }
    
    var task: Task {
        switch self {
        case .getUsers:
            return .requestPlain
        }
    }
    
    var headers: [String: String]? {
        return nil
    }
}
  1. ObjectMapper를 사용하여 API 응답을 매핑합니다. 응답 매핑은 Moya의 request 메서드를 호출한 뒤에 클로저를 통해 수행할 수 있습니다.
import Moya
import ObjectMapper

provider.request(.getUsers) { result in
    switch result {
    case let .success(response):
        do {
            let users = try response.mapObject([User].self)
            // 매핑된 데이터를 사용하여 필요한 작업을 수행합니다.
        } catch {
            // 매핑 오류가 발생한 경우 처리 로직을 추가합니다.
        }
        
    case let .failure(error):
        // 에러 처리 로직을 추가합니다.
    }
}

위의 예제에서는 API 응답을 User 객체 배열로 매핑하는 방법을 보여줍니다. ObjectMapper의 mapObject 메서드를 사용하여 JSON 데이터를 객체로 매핑할 수 있습니다.

요약

이번 포스트에서는 Moya와 ObjectMapper를 사용하여 Swift에서 API 요청 및 응답 처리를 구현하는 방법을 알아보았습니다. Moya는 네트워크 작업을 추상화하여 코드를 간결하게 작성할 수 있도록 도와주며, ObjectMapper는 JSON 데이터를 쉽게 매핑할 수 있도록 지원합니다. 이러한 두 라이브러리를 함께 사용하여 효율적이고 편리한 API 통신 코드를 작성할 수 있습니다.


참고 자료: