작성일 댓글 남기기

GraphQL 서버에 파이썬으로 접근하기

파이썬에서는 requests 라이브러리를 사용하여 GraphQL 서버에 HTTP 요청을 보내고, 데이터를 가져올 수 있습니다. 또한 **gql**이라는 라이브러리를 사용하면 좀 더 직관적인 방식으로 GraphQL 쿼리와 뮤테이션을 작성할 수 있습니다. 두 가지 방식 모두 예제로 보여드릴게요.

1. requests 라이브러리를 사용한 예제

먼저 requests 라이브러리를 이용한 기본적인 GraphQL 클라이언트 예제입니다.

설치:

pip install requests

GraphQL 쿼리 예제:

import requests

# GraphQL 엔드포인트 설정
url = 'http://localhost:4000/graphql'

# GraphQL 쿼리 작성
query = """
{
user(id: 1) {
name
email
}
}
"""

# 요청 보내기
response = requests.post(url, json={'query': query})

# 응답 결과 출력
print(response.json())

이 코드는 파이썬의 requests 라이브러리를 사용하여 GraphQL 서버에 쿼리를 보내는 예제입니다. 이때 쿼리를 JSON 형식으로 서버에 전송하고, 서버의 응답을 JSON으로 출력합니다.

결과:

{
"data": {
"user": {
"name": "John",
"email": "[email protected]"
}
}
}

GraphQL 뮤테이션 예제:

이번에는 사용자를 추가하는 뮤테이션 예제를 살펴보겠습니다.

import requests

# GraphQL 엔드포인트 설정
url = 'http://localhost:4000/graphql'

# GraphQL 뮤테이션 작성
mutation = """
mutation {
addUser(name: "Alice", email: "[email protected]") {
id
name
email
}
}
"""

# 요청 보내기
response = requests.post(url, json={'query': mutation})

# 응답 결과 출력
print(response.json())

이 코드 역시 requests 라이브러리를 사용하여, 새로운 사용자를 추가하는 뮤테이션을 서버에 보내고 결과를 출력합니다.

2. gql 라이브러리를 사용한 예제

**gql**은 GraphQL 쿼리 및 뮤테이션을 좀 더 Pythonic하게 작성할 수 있는 라이브러리입니다.

설치:

pip install gql requests

GraphQL 쿼리 예제:

from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport

# GraphQL 엔드포인트 설정
transport = RequestsHTTPTransport(
url='http://localhost:4000/graphql',
use_json=True
)

client = Client(transport=transport, fetch_schema_from_transport=True)

# GraphQL 쿼리 작성
query = gql("""
{
user(id: 1) {
name
email
}
}
""")

# 쿼리 실행
response = client.execute(query)

# 응답 결과 출력
print(response)

gql 라이브러리를 사용하면 GraphQL 쿼리를 쉽게 실행할 수 있으며, 쿼리 문법도 보다 직관적입니다.

결과:

{
"user": {
"name": "John",
"email": "[email protected]"
}
}

GraphQL 뮤테이션 예제:

from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport

# GraphQL 엔드포인트 설정
transport = RequestsHTTPTransport(
url='http://localhost:4000/graphql',
use_json=True
)

client = Client(transport=transport, fetch_schema_from_transport=True)

# GraphQL 뮤테이션 작성
mutation = gql("""
mutation {
addUser(name: "Alice", email: "[email protected]") {
id
name
email
}
}
""")

# 뮤테이션 실행
response = client.execute(mutation)

# 응답 결과 출력
print(response)

이 예제에서는 gql 라이브러리를 사용하여 새로운 사용자를 추가하는 뮤테이션을 실행합니다.

결론

  1. requests 라이브러리는 HTTP 요청을 쉽게 처리할 수 있으며, GraphQL 요청도 단순하게 보낼 수 있습니다.
  2. gql 라이브러리는 GraphQL 쿼리와 뮤테이션을 조금 더 직관적이고 간결하게 작성할 수 있습니다.

작성일 댓글 남기기

GraphQL 서버에 접근하고 데이터를 요청하기

클라이언트가 서버에 접근하는 방법

클라이언트가 GraphQL 서버에 접근하는 방식은 크게 두 가지로 나눌 수 있습니다:

  1. GraphiQL을 사용한 웹 브라우저에서의 접근
  2. HTTP 요청을 통해 직접 접근하는 방식 (예: Fetch API, Axios, Apollo Client 등)

1. GraphiQL을 사용한 접근

GraphiQL은 GraphQL을 테스트할 수 있는 웹 기반 인터페이스입니다. 서버에 설정된 graphiql: true 옵션 덕분에, 클라이언트는 웹 브라우저에서 GraphQL 쿼리와 뮤테이션을 직접 작성하고 실행할 수 있습니다.

접근 방법:

  • 브라우저에서 http://localhost:4000/graphql에 접속하면, GraphiQL 인터페이스가 나타납니다.
  • 여기서 쿼리나 뮤테이션을 직접 작성해 실행할 수 있습니다.

예를 들어, 특정 사용자의 이름과 이메일을 가져오는 쿼리를 GraphiQL에서 실행하면:

query {
user(id: 1) {
name
email
}
}

서버는 다음과 같은 JSON 형식의 데이터를 반환합니다:

{
"data": {
"user": {
"name": "John",
"email": "[email protected]"
}
}
}

2. HTTP 요청을 사용한 접근

클라이언트는 Fetch API, Axios, 또는 Apollo Client 같은 HTTP 라이브러리를 사용하여 GraphQL 서버에 요청을 보낼 수 있습니다. 이 방식은 브라우저나 모바일 애플리케이션에서 GraphQL 서버와 통신할 때 일반적으로 사용됩니다.

Fetch API를 사용한 접근 예시:

fetch('http://localhost:4000/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
query: `
query {
user(id: 1) {
name
email
}
}
`
})
})
.then(response => response.json())
.then(data => console.log(data));

위의 코드는 클라이언트에서 fetch를 통해 GraphQL 쿼리를 서버에 보내고, 서버로부터 받은 데이터를 출력하는 예제입니다.

Axios를 사용한 접근 예시:

import axios from 'axios';

axios.post('http://localhost:4000/graphql', {
query: `
query {
user(id: 1) {
name
email
}
}
`
})
.then(response => {
console.log(response.data);
});

Axios는 Fetch API와 유사한 방식으로 동작하며, 더 다양한 기능을 제공합니다.

Apollo Client를 사용한 접근 예시:

Apollo Client는 GraphQL 서버와 통신하기 위한 더 고급화된 라이브러리로, 주로 리액트 같은 프론트엔드 프레임워크에서 많이 사용됩니다.

  1. 설치:bash코드 복사
    npm install @apollo/client graphql
  2. Apollo Client 설정:
import { ApolloClient, InMemoryCache, gql } from '@apollo/client';

const client = new ApolloClient({
  uri: 'http://localhost:4000/graphql',
  cache: new InMemoryCache()
});

client
  .query({
    query: gql`
      query {
        user(id: 1) {
          name
          email
        }
      }
    `
  })
  .then(result => console.log(result));

Apollo Client는 쿼리와 뮤테이션을 간단하게 관리할 수 있게 도와주며, 더 복잡한 클라이언트 측 데이터 관리 기능을 제공합니다.

3. 쿼리와 뮤테이션 요청의 구조

클라이언트가 서버에 보낼 때 요청의 구조는 기본적으로 다음과 같습니다:

  • URL: GraphQL 서버의 엔드포인트 (예: http://localhost:4000/graphql)
  • HTTP 메서드: POST (GraphQL 요청은 주로 POST 메서드를 사용)
  • 요청 본문: GraphQL 쿼리 또는 뮤테이션을 JSON 형식으로 포함
{
"query": "query { user(id: 1) { name email } }"
}

서버는 이 요청을 받아서 필요한 데이터를 처리한 후, JSON 형식으로 응답을 반환합니다.

4. 응답 구조

서버로부터 반환되는 응답은 JSON 형식으로 제공됩니다. 일반적인 응답 구조는 다음과 같습니다:

  • data: 요청한 데이터가 담긴 필드
  • errors: 만약 쿼리나 뮤테이션에 오류가 발생했을 때 오류 메시지가 담기는 필드

응답 예시:

{
"data": {
"user": {
"name": "John",
"email": "[email protected]"
}
}
}

오류가 있을 경우:

{
"errors": [
{
"message": "User not found",
"locations": [{ "line": 2, "column": 3 }],
"path": ["user"]
}
]
}

결론

클라이언트가 GraphQL 서버에 접근하는 방식은 크게 두 가지로 나뉩니다:

  1. GraphiQL 같은 웹 기반 툴을 사용해 직접 쿼리를 작성하고 테스트하는 방법.
  2. Fetch API, Axios, Apollo Client 등을 사용해 HTTP 요청을 통해 서버에 쿼리나 뮤테이션을 보내는 방식.

실제 프로젝트에서는 보통 두 번째 방법을 사용하여 클라이언트 애플리케이션과 GraphQL 서버 간에 데이터를 주고받습니다.