[swift] 스위프트 아폴로를 사용한 API 요청 구현 방법

이번 글에서는 스위프트에서 아폴로(Apollo)를 사용하여 API 요청을 어떻게 구현하는지 알아보겠습니다. 아폴로는 GraphQL을 사용하여 데이터를 가져오는 클라이언트 라이브러리로, 강력하고 유연한 기능을 제공합니다.

아폴로 설치

아폴로를 사용하기 위해서는 Cocoapods나 Swift Package Manager를 통해 아폴로를 설치해야 합니다. Cocoapods를 사용한다면 Podfile에 다음과 같이 추가합니다:

pod 'Apollo', '~> 0.37.0'

Swift Package Manager를 사용한다면 프로젝트의 Package.swift에 다음과 같이 추가합니다:

dependencies: [
    .package(url: "https://github.com/apollographql/apollo-ios.git", from: "0.37.0")
]

설치가 완료되었다면, Cocoapods를 사용한 경우 pod install 명령어를 실행하고 Swift Package Manager를 사용한 경우 터미널에서 swift package resolve 명령어를 실행합니다.

스키마 다운로드

아폴로를 사용하여 API 요청을 구현하려면 서버의 GraphQL 스키마가 필요합니다. 스키마는 API 엔드포인트로부터 다운로드할 수 있습니다. 터미널에서 다음 명령어를 실행하여 스키마를 다운로드합니다:

npx apollo schema:download --endpoint=<API_ENDPOINT> schema.json

API_ENDPOINT는 실제 API 엔드포인트 URL로 대체해야 합니다.

아폴로 코드 생성

아폴로는 스키마를 기반으로 Swift 코드를 자동 생성해줍니다. 터미널에서 다음 명령어를 실행하여 코드를 생성합니다:

npx apollo codegen:generate --target=swift --localSchemaFile=schema.json API.swift

이 명령어는 schema.json 파일을 기반으로 API.swift 파일을 생성합니다. 이 파일에는 API 요청에 필요한 타입과 메서드가 자동으로 생성됩니다.

API 요청 구현

이제 아폴로를 사용하여 API 요청을 구현할 수 있습니다. 먼저 생성한 API.swift 파일을 프로젝트에 추가합니다. 그런 다음, 아래와 같이 요청을 생성하고 실행하는 코드를 작성할 수 있습니다:

import Apollo

let apollo = ApolloClient(url: URL(string: "<API_ENDPOINT>")!)

apollo.fetch(query: MyQuery()) { result in
    switch result {
    case .success(let graphQLResult):
        // 성공적으로 데이터를 가져왔을 경우 처리
        print(graphQLResult.data)
    case .failure(let error):
        // 에러가 발생했을 경우 처리
        print("에러 발생: \(error)")
    }
}

위 코드에서 MyQuery는 스키마에 정의된 쿼리 타입 중 하나입니다. 필요한 쿼리 타입에 따라 코드를 작성하면 됩니다.

이제 아폴로를 사용하여 API 요청을 구현하는 방법에 대해 알아보았습니다. 아폴로는 강력한 도구이며 GraphQL을 사용하는 프로젝트에 유용하게 사용될 수 있습니다.

참고 자료