Saltar a contenido

GraphQL

Como FastAPI está basado en el estándar ASGI, es muy fácil integrar cualquier library GraphQL que sea compatible con ASGI.

Puedes combinar operaciones de path regulares de la library de FastAPI con GraphQL en la misma aplicación.

Consejo

GraphQL resuelve algunos casos de uso específicos.

Tiene ventajas y desventajas cuando lo comparas con APIs web comunes.

Asegúrate de evaluar si los beneficios para tu caso de uso compensan las desventajas. 🤓

Librerías GraphQL

Aquí hay algunas de las libraries de GraphQL que tienen soporte con ASGI las cuales podrías usar con FastAPI:

GraphQL con Strawberry

Si necesitas o quieres trabajar con GraphQL, Strawberry es la library recomendada por el diseño más cercano a FastAPI, el cual es completamente basado en anotaciones de tipo.

Dependiendo de tus casos de uso, podrías preferir usar una library diferente, pero si me preguntas, probablemente te recomendaría Strawberry.

Aquí hay una pequeña muestra de cómo podrías integrar Strawberry con 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)

Puedes aprender más sobre Strawberry en la documentación de Strawberry.

Y también en la documentación sobre Strawberry con FastAPI.

Clase obsoleta GraphQLApp en Starlette

Versiones anteriores de Starlette incluyen la clase GraphQLApp para integrarlo con Graphene.

Esto fue marcado como obsoleto en Starlette, pero si aún tienes código que lo usa, puedes fácilmente migrar a starlette-graphene3, la cual cubre el mismo caso de uso y tiene una interfaz casi idéntica.

Consejo

Si necesitas GraphQL, te recomendaría revisar Strawberry, que es basada en anotaciones de tipo en vez de clases y tipos personalizados.

Aprende más

Puedes aprender más acerca de GraphQL en la documentación oficial de GraphQL.

También puedes leer más acerca de cada library descrita anteriormente en sus enlaces.