[swift] Swift Moya에서 SOAP API 테스트하기

SOAP(Simple Object Access Protocol)은 웹 서비스 통신에 사용되는 프로토콜 중 하나입니다. Swift에서 SOAP API를 테스트하려면 Moya를 사용할 수 있습니다. Moya는 Swift에서 네트워크 작업을 수행하기 위한 강력한 라이브러리입니다.

Moya 설치하기

먼저, 프로젝트에 Moya를 설치해야 합니다. CocoaPods를 사용하고 있다면, Podfile에 다음과 같이 Moya를 추가하세요:

pod 'Moya'

그리고 터미널에서 다음 명령어를 실행하여 CocoaPods을 업데이트하세요:

$ pod install

CocoaPods를 사용하지 않는다면, 공식 GitHub 저장소에서 Moya를 다운로드하여 프로젝트에 추가하세요.

SOAP API 테스트하기

Moya를 사용하여 SOAP API를 테스트하는 방법을 알아보겠습니다.

먼저, Moya에서 사용할 SOAP API 요청 모델을 만들어야 합니다. 이 모델은 TargetType을 준수해야 합니다. 예를 들어, 다음과 같은 GetWeatherRequest 모델을 만들 수 있습니다:

import Moya

enum WeatherAPI {
    case getWeather(city: String)
}

extension WeatherAPI: TargetType {
    var baseURL: URL {
        return URL(string: "http://api.weather.com")!
    }
    
    var path: String {
        return "/weather"
    }
    
    var method: Moya.Method {
        return .post
    }
    
    var sampleData: Data {
        return Data()
    }
    
    var task: Task {
        switch self {
        case .getWeather(let city):
            let soapBody = """
            <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                <soap:Body>
                    <GetWeather xmlns="http://api.weather.com">
                        <City>\(city)</City>
                    </GetWeather>
                </soap:Body>
            </soap:Envelope>
            """
            return .requestCustomSOAPAction(soapBody: soapBody)
        }
    }
    
    var headers: [String : String]? {
        return ["Content-Type": "text/xml"]
    }
}

extension Task {
    static func requestCustomSOAPAction(soapBody: String) -> Task {
        return .requestParameters(
            parameters: ["SOAPBody": soapBody],
            encoding: URLEncoding.default
        )
    }
}

위 예시에서 GetWeatherRequestWeatherAPI 열거형에 대한 구현입니다. WeatherAPI 열거형에는 getWeather라는 하나의 케이스가 있습니다. getWeather 케이스는 도시 이름을 매개변수로 받아 해당 도시의 날씨를 요청하는 SOAP API를 호출합니다.

이제 Moya를 사용하여 SOAP API를 호출하는 방법을 알아보겠습니다. 예를 들어, 다음과 같이 WeatherAPI를 사용하여 날씨 정보를 요청할 수 있습니다:

import Moya

let provider = MoyaProvider<WeatherAPI>()

provider.request(.getWeather(city: "Seoul")) { result in
    switch result {
    case let .success(response):
        // API 요청 성공
        // 응답 데이터 처리
    case let .failure(error):
        // API 요청 실패
        // 에러 처리
    }
}

위 예시에서 providerWeatherAPI에 대한 MoyaProvider입니다. provider를 사용하여 .getWeather 케이스로 API 요청을 보냅니다. 요청이 성공하면 .success 케이스에서 응답 데이터를 처리하고, 요청이 실패하면 .failure 케이스에서 에러를 처리할 수 있습니다.

이제 Swift Moya를 사용하여 SOAP API를 테스트하는 방법을 알게 되었으니, 원하는 다른 API를 테스트하거나 필요한 SOAP API에 맞게 TargetType을 구현할 수 있습니다.

참고 문서: