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

SOAP (Simple Object Access Protocol)는 웹 서비스 통신에 사용되는 프로토콜입니다. Swift Moya는 Alamofire 기반의 네트워킹 라이브러리로, SOAP API를 호출하는 데 유용하게 활용할 수 있습니다. 이번 포스트에서는 Swift Moya를 사용하여 SOAP API를 호출하는 방법에 대해 알아보겠습니다.

Moya 설치하기

먼저, Cocoapods를 사용하여 Moya를 설치해야 합니다. Podfile에 다음과 같은 내용을 추가합니다.

pod 'Moya'

터미널에서 pod install을 실행하여 Moya를 프로젝트에 추가합니다.

Moya Provider 설정하기

Moya는 API 호출을 처리하기 위해 MoyaProvider를 제공합니다. Provider를 설정하려면 먼저 enum을 만들고, 해당 enum에서 TargetType 프로토콜을 준수해야 합니다.

import Moya

enum SoapAPI {
    case getInfo(param1: String, param2: String)
}

extension SoapAPI: TargetType {
    var baseURL: URL {
        return URL(string: "http://apiurl.com")! // 실제 API URL로 대체
    }
    
    var path: String {
        return "/soapapi" // 실제 API 경로로 대체
    }
    
    var method: Moya.Method {
        return .post
    }
    
    var sampleData: Data {
        return Data()
    }
    
    var task: Task {
        switch self {
        case .getInfo(let param1, let param2):
            let soapMessage = """
            <?xml version="1.0" encoding="utf-8"?>
            <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                <soap:Body>
                    <GetInfo xmlns="http://apiurl.com">
                        <param1>\(param1)</param1>
                        <param2>\(param2)</param2>
                    </GetInfo>
                </soap:Body>
            </soap:Envelope>
            """
            
            return .requestData(soapMessage.data(using: .utf8)!)
        }
    }
    
    var headers: [String: String]? {
        return ["Content-Type": "text/xml"]
    }
}

위의 예제에서는 getInfo라는 API를 호출하기 위해 enum을 사용했습니다. 호출에 필요한 파라미터를 포함한 SOAP 메세지를 문자열로 생성하고, 이를 requestData 형태의 task로 반환합니다. 필요에 따라 다른 API를 호출하려면 enum에 새로운 케이스를 추가하면 됩니다.

API 호출하기

MoyaProvider를 사용하여 API를 호출하는 방법은 간단합니다. provider.request() 메서드를 호출하고, 클로저를 사용하여 응답을 처리합니다.

import Moya

let provider = MoyaProvider<SoapAPI>()

provider.request(.getInfo(param1: "value1", param2: "value2")) { result in
    switch result {
    case let .success(response):
        // 응답을 처리하는 코드 작성
        let data = response.data
        // ...
    case let .failure(error):
        // 에러 처리 코드 작성
        print(error.localizedDescription)
    }
}

위의 예제에서는 .getInfo API를 호출하고, 응답을 처리하는 클로저를 작성했습니다. 성공적인 응답일 경우 response.data를 이용하여 데이터를 처리할 수 있습니다. 실패한 경우에는 error.localizedDescription을 이용하여 에러 메시지를 출력합니다.

결론

Moya를 사용하여 SOAP API를 호출하는 방법에 대해 알아보았습니다. 이를 통해 Swift 언어로 개발된 iOS 앱에서 SOAP API를 쉽게 호출할 수 있습니다. 위의 예제를 참고하여 원하는 SOAP API를 호출해 보세요!


참고 자료