GraphQL¶
FastAPI는 ASGI 표준을 기반으로 하므로, ASGI와도 호환되는 어떤 GraphQL 라이브러리든 매우 쉽게 통합할 수 있습니다.
같은 애플리케이션에서 일반 FastAPI 경로 처리와 GraphQL을 함께 조합할 수 있습니다.
팁
GraphQL은 몇 가지 매우 특정한 사용 사례를 해결합니다.
일반적인 web API와 비교했을 때 장점과 단점이 있습니다.
여러분의 사용 사례에서 이점이 단점을 상쇄하는지 꼭 평가해 보세요. 🤓
GraphQL 라이브러리¶
다음은 ASGI 지원이 있는 GraphQL 라이브러리들입니다. FastAPI와 함께 사용할 수 있습니다:
- Strawberry 🍓
- FastAPI용 문서 제공
- Ariadne
- FastAPI용 문서 제공
- Tartiflette
- ASGI 통합을 제공하기 위해 Tartiflette ASGI 사용
- Graphene
Strawberry로 GraphQL 사용하기¶
GraphQL로 작업해야 하거나 작업하고 싶다면, Strawberry를 권장합니다. FastAPI의 설계와 가장 가깝고, 모든 것이 type annotations에 기반해 있기 때문입니다.
사용 사례에 따라 다른 라이브러리를 선호할 수도 있지만, 제게 묻는다면 아마 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에 대해 더 알아볼 수 있습니다.
또한 FastAPI에서 Strawberry 사용에 대한 문서도 확인해 보세요.
Starlette의 예전 GraphQLApp¶
이전 버전의 Starlette에는 Graphene과 통합하기 위한 GraphQLApp 클래스가 포함되어 있었습니다.
이것은 Starlette에서 deprecated 되었지만, 이를 사용하던 코드가 있다면 같은 사용 사례를 다루고 거의 동일한 인터페이스를 가진 starlette-graphene3로 쉽게 마이그레이션할 수 있습니다.
팁
GraphQL이 필요하다면, 커스텀 클래스와 타입 대신 type annotations에 기반한 Strawberry를 여전히 확인해 보시길 권장합니다.
더 알아보기¶
공식 GraphQL 문서에서 GraphQL에 대해 더 알아볼 수 있습니다.
또한 위에서 설명한 각 라이브러리에 대해서도 해당 링크에서 더 자세히 읽어볼 수 있습니다.