[swift] Moya와 ObjectMapper를 사용하여 API 호출 및 데이터 매핑하는 코드 예제

이 예제에서는 Swift에서 Moya와 ObjectMapper를 사용하여 API 호출을 수행하고 데이터를 매핑하는 방법을 알아보겠습니다. Moya는 네트워킹 라이브러리이며, ObjectMapper는 JSON 데이터를 객체로 매핑해주는 라이브러리입니다.

Moya 설치

먼저, Moya를 설치해야 합니다. Moya는 CocoaPods를 통해 설치할 수 있습니다. Podfile에 다음 줄을 추가하고, 터미널에서 pod install 명령을 실행하여 Moya를 설치하세요.

pod 'Moya'

ObjectMapper 설치

다음으로, ObjectMapper를 설치해야 합니다. ObjectMapper도 CocoaPods를 사용하여 설치할 수 있습니다. Podfile에 다음 줄을 추가하고, 터미널에서 pod install 명령을 실행하여 ObjectMapper를 설치하세요.

pod 'ObjectMapper'

네트워크 매니저 설정

Moya를 사용하여 API 호출을 수행하기 위해, 네트워크 매니저를 설정해야 합니다. enum을 사용하여 요청에 대한 열거형을 정의하고, Moya의 TargetType 프로토콜을 구현합니다. 다음은 네트워크 매니저 설정의 예시입니다.

import Moya

enum ApiService {
    case getUsers
    case getUser(id: Int)
}

extension ApiService: TargetType {
    var baseURL: URL {
        return URL(string: "https://api.example.com")!
    }
    
    var path: String {
        switch self {
        case .getUsers:
            return "/users"
        case .getUser(let id):
            return "/users/\(id)"
        }
    }
    
    var method: Moya.Method {
        switch self {
        case .getUsers, .getUser:
            return .get
        }
    }
    
    var sampleData: Data {
        return Data()
    }
    
    var task: Task {
        return .requestPlain
    }
    
    var headers: [String : String]? {
        return nil
    }
}

API 호출 및 데이터 매핑

Moya와 ObjectMapper를 사용하여 API 호출을 수행하고 데이터를 매핑하는 방법은 다음과 같습니다.

  1. MoyaProvider를 생성합니다.
import Moya

let provider = MoyaProvider<ApiService>()
  1. API 호출을 수행하고 응답을 매핑합니다.
import ObjectMapper

provider.request(.getUsers) { result in
    switch result {
    case .success(let response):
        do {
            let json = try response.mapJSON()
            if let users = Mapper<User>().mapArray(JSONObject: json) {
                // 성공적으로 데이터를 매핑한 경우, users 배열 사용
            } else {
                // 데이터 매핑 실패
            }
        } catch {
            // JSON 매핑 실패
        }
        
    case .failure(let error):
        // API 호출 실패
    }
}

위의 코드에서 User는 매핑할 데이터 모델의 예시입니다. 해당 데이터 모델은 ObjectMapper를 사용하여 생성되어야 합니다.

  1. 데이터 모델 생성
import ObjectMapper

class User: Mappable {
    var id: Int?
    var name: String?
    var email: String?

    required init?(map: Map) {
    }

    func mapping(map: Map) {
        id <- map["id"]
        name <- map["name"]
        email <- map["email"]
    }
}

위의 코드에서 User 클래스는 ObjectMapper의 Mappable 프로토콜을 구현하여 데이터를 매핑합니다. 각 프로퍼티는 mapping 함수를 사용하여 JSON 키와 매핑됩니다.

이제 Moya와 ObjectMapper를 사용하여 API 호출 및 데이터 매핑을 수행하는 방법을 알게 되었습니다. 이 예제를 참고하여 프로젝트에 적용해보세요.


참고: