[python] FastAPI에서 GraphQL 쿼리 사용하기

FastAPI는 빠르고 현대적인 Python 웹 프레임워크입니다. 이 프레임워크를 사용하면 쉽게 GraphQL을 사용할 수 있습니다. GraphQL은 API를 위한 쿼리 언어입니다. 이를 통해 클라이언트는 필요한 데이터를 정확하게 요청할 수 있습니다.

FastAPI와 GraphQL을 함께 사용하기 위해 다음과 같은 단계를 따를 수 있습니다.

1. FastAPI 설치하기

FastAPI를 사용하기 위해 먼저 FastAPI를 설치해야 합니다. 터미널에서 다음 명령어를 실행하여 FastAPI를 설치합니다.

pip install fastapi

또한, FastAPI의 기본 의존성인 pydantic도 설치해야 합니다.

pip install pydantic

2. 필요한 패키지 설치하기

FastAPI와 GraphQL을 함께 사용하려면 몇 가지 패키지가 필요합니다. 다음 명령어를 사용하여 필요한 패키지를 설치합니다.

pip install graphene pydantic fastapi-starlette requests

3. GraphQL 스키마 작성하기

GraphQL은 스키마에 따라 데이터를 요청합니다. 스키마는 데이터 모델을 정의하고 어떤 데이터를 요청할 수 있는지 정의합니다. FastAPI와 함께 사용하기 위해 스키마를 작성해야 합니다.

from typing import List
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float

class Query(BaseModel):
    items: List[Item]

class Mutation(BaseModel):
    create_item: Item

schema = graphene.Schema(query=Query, mutation=Mutation)

4. FastAPI 앱 생성하기

from fastapi import FastAPI
from starlette.graphql import GraphQLApp

app = FastAPI()

app.add_route("/graphql", GraphQLApp(schema=schema))

5. FastAPI 앱 실행하기

FastAPI 앱을 실행하기 위해 다음과 같은 명령어를 사용합니다.

uvicorn main:app --reload

main은 FastAPI 앱의 진입점 파일명입니다. 만약 다른 파일로 진입점을 설정했다면 해당 파일명을 사용하면 됩니다.

6. GraphQL 쿼리 수행하기

위의 단계를 완료하면 FastAPI 서버가 실행됩니다. 이제 클라이언트에서 GraphQL 쿼리를 수행할 수 있습니다. 클라이언트에서는 /graphql 엔드포인트로 쿼리를 보냅니다.

import requests

query = '''
    query {
        items {
            name
            price
        }
    }
'''

response = requests.post('http://localhost:8000/graphql', json={'query': query})

위의 예제는 FastAPI 서버에 /graphql 엔드포인트로 items 데이터와 name, price를 요청하는 쿼리를 보내는 방법입니다. 응답은 JSON 형식으로 반환됩니다.

이제 FastAPI와 GraphQL을 함께 사용할 수 있습니다. GraphQL을 통해 클라이언트는 필요한 데이터만 정확하게 요청할 수 있고, FastAPI를 통해 빠르고 안정적인 웹 애플리케이션을 개발할 수 있습니다.