GraphQL

GraphQL (GraphQL)

FastAPIASGI 표준을 기반으로 하기 때문에, ASGI와 호환되는 어떤 GraphQL 라이브러리든 아주 쉽게 통합할 수 있어요.

같은 애플리케이션에서 일반적인 FastAPI 경로 연산과 GraphQL을 함께 쓸 수 있죠.

GraphQL은 아주 특정한 사용 사례를 해결해요. 일반적인 웹 API와 비교하면 장점단점이 모두 있어요. 여러분의 사용 사례에 이점단점을 상쇄하는지 꼭 평가해 보세요. 🤓

출처: 공식문서

GraphQL 라이브러리

ASGI를 지원하는 GraphQL 라이브러리들이 있어요. FastAPI와 함께 쓸 수 있어요:

Strawberry로 GraphQL 사용하기

GraphQL로 작업해야 하거나 하고 싶다면, Strawberry추천되는 라이브러리예요. FastAPI의 설계와 가장 비슷한 설계를 갖고 있고, 전부 타입 어노테이션을 기반으로 하거든요.

사용 사례에 따라 다른 라이브러리를 선호할 수도 있겠지만, 저에게 묻는다면 Strawberry를 써 보시라고 권할 거예요.

Strawberry를 FastAPI와 통합하는 방법의 작은 미리보기예요:

import strawberry
from fastapi import FastAPI
from strawberry.fastapi import GraphQLRouter

@strawberry.type
class User:
    name: str
    age: int

@strawberry.type
class Query:
    @strawberry.field
    def user(self) -> User:
        return User(name="Patrick", age=100)

schema = strawberry.Schema(query=Query)

graphql_app = GraphQLRouter(schema)

app = FastAPI()
app.include_router(graphql_app, prefix="/graphql")

Strawberry에 대해 더 알고 싶다면 Strawberry 문서를 확인해 보세요.

그리고 Strawberry와 FastAPI에 대한 문서도 있어요.

Starlette의 예전 GraphQLApp

예전 버전의 Starlette에는 Graphene과 통합하기 위한 GraphQLApp 클래스가 포함돼 있었어요.

이건 Starlette에서 deprecated(더 이상 권장되지 않음)됐지만, 예전에 이걸 쓴 코드가 있다면 starlette-graphene3로 쉽게 마이그레이션할 수 있어요. 같은 사용 사례를 다루고 거의 동일한 인터페이스를 갖고 있거든요.

— GraphQL이 필요하다면 여전히 Strawberry를 확인해 보시길 권해요. 커스텀 클래스와 타입 대신 타입 어노테이션을 기반으로 하거든요.

더 알아보기 (Learn more)

  • 원문: GraphQL - FastAPI
  • GraphQL 공식 문서에서 GraphQL 자체에 대해 더 배울 수 있어요. 위에서 설명한 각 라이브러리에 대한 내용도 각자 링크에서 더 읽을 수 있어요.