[swift] Swift Moya에서 REST API 호출하기

Swift Moya는 Swift에서 REST API를 호출하기 위해 사용되는 간편한 네트워킹 라이브러리입니다. Moya는 Alamofire 위에 구축되어 있으며, 네트워킹 로직을 단순화하고 추상화하는데 도움을 줍니다. 이 블로그 포스트에서는 Swift Moya를 사용하여 REST API를 호출하는 방법에 대해 알아보겠습니다.

Moya 설정하기

먼저, 프로젝트에 Moya를 설치해야 합니다. CocoaPods를 사용하여 다음과 같이 Podfile을 만듭니다.

# Podfile
platform :ios, '10.0'
use_frameworks!

target 'YourProjectName' do
  pod 'Moya'
end

그런 다음 터미널에서 pod install 명령을 실행하여 Moya를 프로젝트에 설치합니다.

API 서비스 생성하기

다음으로, API 서비스를 생성해야 합니다. API 서비스는 Moya의 TargetType 프로토콜을 준수해야 합니다. 예를 들어, 예제 API에서 사용되는 UserAPI라는 클래스를 만들어 보겠습니다.

import Moya

enum UserAPI {
    case getUser(id: Int)
    case createUser(name: String, email: String)
}

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

위의 코드에서는 UserAPI 열거형을 정의하고, TargetType 프로토콜을 구현했습니다. baseURL 속성에서 API의 기본 URL을 정의하고, path 속성에서 각 열거형 케이스에 해당하는 엔드포인트를 정의합니다. methodtask 속성은 요청 방법과 매개변수를 정의하며, headers 속성은 요청 헤더를 정의합니다. sampleData 속성은 테스트 용도로 사용됩니다.

API 호출하기

이제 Moya를 사용하여 API를 호출할 수 있습니다. 먼저, MoyaProvider 인스턴스를 생성해야 합니다.

let provider = MoyaProvider<UserAPI>()

그리고 API를 호출하려면 request 메소드를 사용합니다.

provider.request(.getUser(id: 1)) { result in
    switch result {
    case .success(let response):
        // 성공적으로 요청을 받았을 때의 처리
        let data = response.data
        // JSON 디코딩 등의 작업 수행
        
    case .failure(let error):
        // 요청 실패 시의 처리
        print(error.localizedDescription)
    }
}

위의 코드에서는 .getUser 케이스를 사용하여 API를 호출하고, 결과를 받아 처리합니다. result 매개변수에는 성공 혹은 실패 여부와 함께 결과가 전달됩니다. 성공적으로 요청을 받았을 경우에는 응답 데이터를 가져와 JSON 디코딩 등의 작업을 수행할 수 있습니다. 실패한 경우에는 오류 메시지를 출력합니다.

결론

이제 Swift Moya를 사용하여 REST API를 호출하는 방법에 대해 알아보았습니다. Moya는 네트워킹 로직을 추상화하여 개발자가 더욱 편하게 API를 호출할 수 있도록 도와줍니다. Moya의 공식 문서와 예제 코드를 참조하여 더 자세한 내용을 확인할 수 있습니다.

참고 자료