[swift] Alamofire를 활용한 GraphQL 요청 구현하기

GraphQL은 API에 대한 쿼리 언어이며, Alamofire는 네트워크 통신을 위한 Swift 기반의 라이브러리입니다. 이번 글에서는 Alamofire를 사용하여 GraphQL 요청을 구현하는 방법에 대해 알아보겠습니다.

먼저, Alamofire를 프로젝트에 추가해야 합니다. 프로젝트의 Podfile에 다음과 같이 Alamofire를 추가합니다.

pod 'Alamofire'

그리고 터미널에서 pod install 명령어를 실행하여 Alamofire를 설치합니다.

이제, GraphQL 요청을 보내기 위한 GraphQL 객체를 작성합니다. GraphQL 객체는 Alamofire를 사용하여 HTTP POST 요청을 보내고, GraphQL 쿼리 및 변수를 전달하는 역할을 합니다.

import Alamofire

struct GraphQL {
    static func request(query: String, variables: [String: Any]?, completion: @escaping (Result<Any, Error>) -> Void) {
        let url = "https://api.example.com/graphql" // GraphQL 엔드포인트
        
        var headers = HTTPHeaders()
        // 필요한 경우에 헤더를 추가합니다.
        
        let parameters: [String: Any] = [
            "query": query,
            "variables": variables ?? [:]
        ]
        
        AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
            .validate()
            .responseJSON { response in
                switch response.result {
                case .success(let data):
                    completion(.success(data))
                case .failure(let error):
                    completion(.failure(error))
                }
            }
    }
}

GraphQL 객체의 request 메소드는 GraphQL 쿼리와 변수를 전달받아 Alamofire를 사용하여 HTTP POST 요청을 보내고, 응답 결과를 처리합니다.

사용 예시는 다음과 같습니다.

let query = """
query {
  user(id: "123") {
    name
    email
  }
}
"""

let variables: [String: Any] = [
    "variable1": "value1",
    "variable2": 2
]

GraphQL.request(query: query, variables: variables) { result in
    switch result {
    case .success(let data):
        // 응답 결과 처리
        print(data)
    case .failure(let error):
        // 오류 처리
        print(error)
    }
}

위 예시에서는 query 변수에 GraphQL 쿼리를, variables 변수에 변수 값을 전달하고 있습니다. GraphQL.request 메소드를 호출하여 요청을 보내고, 응답 결과나 오류를 처리할 수 있습니다.

이렇게하면 Alamofire를 활용하여 GraphQL 요청을 쉽게 구현할 수 있습니다.