[python] FastAPI에서 GraphQL 지원하기

GraphQL은 클라이언트가 원하는 데이터를 정확히 요청하고 서버는 그에 맞는 응답을 제공하기 위한 쿼리 언어입니다. FastAPI는 Python 기반 웹 프레임워크로서, 강력하고 효율적인 API 개발을 지원하는 도구입니다. FastAPI를 사용하여 GraphQL을 지원하는 방법에 대해 알아보겠습니다.

1. 필수 패키지 설치

FastAPI에서 GraphQL을 지원하려면 몇 가지 패키지를 설치해야 합니다. 다음 명령을 사용하여 필요한 패키지를 설치하세요.

pip install fastapi
pip install graphene
pip install uvicorn

2. GraphQL 스키마 정의하기

GraphQL 스키마는 어떤 타입의 데이터를 요청할 수 있는지 정의하는 역할을 합니다. 예를 들어, 사용자를 나타내는 User 타입을 정의하기 위해 다음과 같이 스키마를 작성할 수 있습니다.

import graphene

class User(graphene.ObjectType):
    id = graphene.Int()
    name = graphene.String()
    email = graphene.String()

3. 쿼리 및 뮤테이션 정의하기

쿼리(query)는 데이터를 읽기 위한 연산을 정의하고, 뮤테이션(mutation)은 데이터를 변경하기 위한 연산을 정의합니다. 예를 들어, 사용자를 생성하는 뮤테이션을 정의하기 위해 다음과 같이 작성할 수 있습니다.

class CreateUser(graphene.Mutation):
    class Arguments:
        name = graphene.String()
        email = graphene.String()

    user = graphene.Field(User)

    def mutate(self, info, name, email):
        user = User(id=1, name=name, email=email)
        return CreateUser(user=user)

class Mutation(graphene.ObjectType):
    create_user = CreateUser.Field()

4. FastAPI 앱 생성하기

GraphQL을 지원하기 위한 FastAPI 앱을 생성합니다. 다음과 같이 작성하세요.

from fastapi import FastAPI
from graphene import Schema

app = FastAPI()

@app.post('/graphql')
async def graphql(query: str):
    schema = Schema(query=Query, mutation=Mutation)
    result = schema.execute(query)
    return result.to_dict()

5. 실행하기

FastAPI를 실행하고 http://localhost:8000/graphql에 POST 요청을 보내면 GraphQL 쿼리를 실행할 수 있습니다.

GraphQL Playground 등의 도구를 사용하여 다양한 쿼리 및 뮤테이션을 실행해보세요!

위에서는 간단한 예제를 사용하여 FastAPI에서 GraphQL을 지원하는 방법을 설명하였습니다. 보다 복잡한 스키마 및 쿼리를 구성할 수 있으며, 자세한 내용은 FastAPI 문서Graphene 문서를 참조하세요.