[swift] 아폴로 클라이언트의 쿼리와 뮤테이션 작성 방법

아폴로(Apollo)는 GraphQL을 사용하여 데이터를 가져오고 조작할 수 있는 클라이언트 라이브러리입니다. Swift에서 아폴로 클라이언트를 사용하여 쿼리와 뮤테이션을 작성하는 방법에 대해 알아보겠습니다.

1. 아폴로 클라이언트 설정

먼저, Swift 프로젝트에 아폴로 클라이언트를 설치해야 합니다. Cocoapods를 사용하는 경우, Podfile에 다음과 같이 아폴로 클라이언트를 추가합니다.

pod 'Apollo', '~> 0.42.0'

그리고 Podfile이 있는 디렉토리에서 pod install 명령어를 실행하여 의존성을 설치합니다.

2. 스키마 파일 가져오기

다음으로, 아폴로 클라이언트가 GraphQL 스키마를 이해할 수 있도록 스키마 파일(.graphql)을 가져와야 합니다. 스키마 파일은 GraphQL 서버에서 제공하는 것입니다.

프로젝트에 스키마 파일을 추가한 후, Xcode의 Build Phases에서 “Apollo GraphQL” 탭으로 이동하여 “Generate Apollo API” 옵션을 선택합니다. 이렇게 하면 아폴로 클라이언트가 스키마 파일을 기반으로 코드를 생성할 수 있습니다.

3. 쿼리 작성

아폴로 클라이언트를 사용하여 데이터를 가져오기 위해 쿼리를 작성해야 합니다. 아래는 Swift에서 아폴로 클라이언트를 사용하여 쿼리를 작성하는 예시입니다.

import Apollo

let apollo = ApolloClient(url: URL(string: "https://api.example.com/graphql")!)

let query = SomeQuery()

apollo.fetch(query: query) { result in
    switch result {
    case .success(let graphQLResult):
        // 성공적으로 데이터를 가져왔을 때의 로직
        let data = graphQLResult.data
    case .failure(let error):
        // 데이터를 가져오는데 실패했을 때의 로직
        print("Error fetching data: \(error)")
    }
}

위 코드에서 SomeQuery는 스키마 파일에서 정의된 쿼리입니다. apollo.fetch(query:completionHandler:) 메서드를 사용하여 쿼리를 실행하고, 결과를 처리하는 로직을 작성합니다.

4. 뮤테이션 작성

뮤테이션은 데이터를 변경하거나 생성하기 위해 사용됩니다. 아래는 Swift에서 아폴로 클라이언트를 사용하여 뮤테이션을 작성하는 예시입니다.

import Apollo

let apollo = ApolloClient(url: URL(string: "https://api.example.com/graphql")!)

let mutation = CreatePostMutation(input: CreatePostInput(author: "John", title: "New Post"))

apollo.perform(mutation: mutation) { result in
    switch result {
    case .success(let graphQLResult):
        // 성공적으로 뮤테이션을 실행했을 때의 로직
        let data = graphQLResult.data
    case .failure(let error):
        // 뮤테이션을 실행하는데 실패했을 때의 로직
        print("Error performing mutation: \(error)")
    }
}

위 코드에서 CreatePostMutation은 스키마 파일에서 정의된 뮤테이션입니다. apollo.perform(mutation:completionHandler:) 메서드를 사용하여 뮤테이션을 실행하고, 결과를 처리하는 로직을 작성합니다.

참고 자료

위의 방법을 통해 Swift에서 아폴로 클라이언트의 쿼리와 뮤테이션을 작성할 수 있습니다. 다양한 기능과 옵션에 대해 더 자세히 알고 싶다면, Apollo for iOS 문서와 GraphQL 공식 문서를 참고해주세요.