Ir para o conteúdo

GraphQL

Como o FastAPI é baseado no padrão ASGI, é muito fácil integrar qualquer biblioteca GraphQL também compatível com ASGI.

Você pode combinar operações de rota normais do FastAPI com GraphQL na mesma aplicação.

Dica

GraphQL resolve alguns casos de uso muito específicos.

Ele tem vantagens e desvantagens quando comparado a web APIs comuns.

Certifique-se de avaliar se os benefícios para o seu caso de uso compensam as desvantagens. 🤓

Bibliotecas GraphQL

Aqui estão algumas das bibliotecas GraphQL que têm suporte ASGI. Você pode usá-las com FastAPI:

GraphQL com Strawberry

Se você precisar ou quiser trabalhar com GraphQL, Strawberry é a biblioteca recomendada pois tem o design mais próximo ao design do FastAPI, ela é toda baseada em type annotations.

Dependendo do seu caso de uso, você pode preferir usar uma biblioteca diferente, mas se você me perguntasse, eu provavelmente sugeriria que você experimentasse o Strawberry.

Aqui está uma pequena prévia de como você poderia integrar Strawberry com FastAPI:

import strawberry
from fastapi import FastAPI
from strawberry.asgi import GraphQL


@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 = GraphQL(schema)

app = FastAPI()
app.add_route("/graphql", graphql_app)
app.add_websocket_route("/graphql", graphql_app)

Você pode aprender mais sobre Strawberry na documentação do Strawberry.

E também na documentação sobre Strawberry com FastAPI.

Antigo GraphQLApp do Starlette

Versões anteriores do Starlette incluiam uma classe GraphQLApp para integrar com Graphene.

Ela foi descontinuada do Starlette, mas se você tem código que a utilizava, você pode facilmente migrar para starlette-graphene3, que cobre o mesmo caso de uso e tem uma interface quase idêntica.

Dica

Se você precisa de GraphQL, eu ainda recomendaria que você desse uma olhada no Strawberry, pois ele é baseado em type annotations em vez de classes e tipos personalizados.

Saiba Mais

Você pode aprender mais sobre GraphQL na documentação oficial do GraphQL.

Você também pode ler mais sobre cada uma das bibliotecas descritas acima em seus links.