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

이번 포스트에서는 Swift Moya를 사용하여 GraphQL API를 호출하는 방법을 알아보겠습니다.

GraphQL은 Facebook에서 개발한 쿼리 언어로, RESTful API와는 달리 클라이언트가 필요한 데이터만을 요청하여 한 번의 호출로 효율적으로 가져올 수 있습니다. Swift Moya는 Alamofire라이브러리를 기반으로 한 네트워킹 라이브러리로, RESTful API뿐 아니라 GraphQL API 호출에도 사용할 수 있습니다.

Moya 및 필요한 패키지 설치

먼저, 프로젝트에 Swift Moya를 설치해야 합니다. CocoaPods를 사용하는 경우, Podfile에 다음과 같이 작성하여 설치할 수 있습니다.

pod 'Moya'

이외에도 필요한 패키지로는 ApolloApolloCodegen이 있습니다. Apollo는 실제 GraphQL API와 통신하기 위한 클라이언트 라이브러리이며, ApolloCodegen은 GraphQL 쿼리 및 스키마를 사용하여 Swift 코드를 생성하는 도구입니다.

pod 'Apollo'
pod 'ApolloCodegen'

위와 같이 필요한 패키지들을 설치한 후, pod install 명령어를 실행하여 패키지들을 다운로드 및 설정해줍니다.

GraphQL 스키마 및 코드 생성

GraphQL을 사용하기 위해선 서버의 스키마 정보가 필요합니다. 스키마 정보를 받아올 수 있는 방법은 여러 가지가 있지만, 대부분의 GraphQL API는 Introspection 기능을 제공하므로 apollo-codegen download-schema 명령어를 통해 서버에서 스키마 정보를 다운로드할 수 있습니다.

다운로드한 스키마 정보로부터 Swift 코드를 생성하기 위해, .graphql 확장자를 가진 GraphQL 파일을 작성해야 합니다. 이 파일에는 GraphQL 쿼리 및 뮤테이션의 정보가 포함되어야 하며, ApolloCodegen을 사용하여 이 파일로부터 Swift 코드를 자동으로 생성할 수 있습니다.

API 호출

Swift Moya와 Apollo를 사용하여 GraphQL API를 호출하는 방법에 대해 알아보겠습니다. 우선, MoyaProvider를 생성하고, 이를 사용하여 GraphQL 요청을 보내는 코드를 작성합니다.

import Moya
import Apollo

let provider = MoyaProvider<MyAPI>()

provider.request(.myGraphQLRequest(query: MyQuery())) { result in
    switch result {
    case let .success(response):
        do {
            let data = try response.mapJSON()
            print("GraphQL response: \(data)")
        } catch {
            print("Error: \(error)")
        }
    case let .failure(error):
        print("Network error: \(error)")
    }
}

위의 예제에서 .myGraphQLRequestMoya.TargetType을 준수하는 enum 값으로, 실제 API 호출을 나타냅니다. 이 값은 MoyaProvider에 전달하여 API 호출을 실행합니다. 호출 결과는 Result enum 값으로 전달되며, switch 문을 사용하여 성공 및 실패 여부를 처리할 수 있습니다.

결과는 JSON 형식으로 반환되며, 필요에 따라 이를 Swift 객체로 변환하여 사용할 수 있습니다.

결론

이번 포스트에서는 Swift Moya를 사용하여 GraphQL API를 호출하는 방법을 알아보았습니다. Swift Moya와 Apollo를 함께 사용하면, GraphQL API 호출을 더욱 간편하고 효율적으로 처리할 수 있습니다. GraphQL을 사용하여 더욱 유연하고 성능 좋은 앱을 개발해보세요!

참고 자료