GraphQL¶
Como FastAPI esta basado en el estándar ASGI, es muy facil integrar cualquier librería GraphQL que sea compatible con ASGI.
Tu puedes combinar operaciones regulares de ruta de la librería de FastAPI con GraphQL en la misma aplicación.
Tip
GraphQL resuelve algunos casos de uso específicos.
Tiene ventajas y desventajas cuando lo comparas con APIs web comunes.
Asegúrate de evaluar sí los beneficios para tu caso de uso compensan las desventajas.🤓
Librerías GraphQL¶
Aquí hay algunas de las librerías de GraphQL que tienen soporte con ASGI las cuales podrías usar con FastAPI:
- Strawberry 🍓
- Ariadne
- Con documentación para Starlette (Aplica para FastAPI)
- Tartiflette
- Con Tartiflette ASGI para proveer integración con ASGI
- Graphene
GraphQL con Strawberry¶
Sí necesitas o quieres trabajar con GraphQL, Strawberry es la librería recomendada por el diseño mas cercano a FastAPI, el cual es completamente basado en anotaciones de tipo.
Dependiendo de tus casos de uso, podrías preferir usar una librería diferente, pero sí tu 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 mas sobre Strawberry en la documentación de Strawbeery.
Y también en la documentación sobre Strawberry con FastAPI.
Clase deprecada GraphQLApp
en Starlette¶
Versiones anteriores de Starlette incluyen la clase GraphQLApp
para integrarlo con Graphene.
Esto fue deprecado de Starlette, pero sí aún tienes código que lo usa, puedes facilmente migrar a starlette-graphene3, la cual cubre el mismo caso de uso y tiene una interfaz casi idéntica.
Tip
Sí tu necesitas GraphQL, aún 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 librería descrita anteriormente en sus enlaces.