GraphQL dává klientovi kontrolu nad tím, jaká data chce. Jeden endpoint, žádné over-fetching.
Schema a resolvers — Python¶
import strawberry from strawberry.fastapi import GraphQLRouter @strawberry.type class User: id: int name: str email: str @strawberry.type class Query: @strawberry.field async def users(self) -> list[User]: return await db.users.find_all() @strawberry.field async def user(self, id: int) -> User | None: return await db.users.find(id) schema = strawberry.Schema(Query) app.include_router(GraphQLRouter(schema), prefix=”/graphql”)
DataLoader — řešení N+1¶
from strawberry.dataloader import DataLoader async def load_users(ids: list[int]) -> list[User]: users = await db.users.find_many(ids) return [next(u for u in users if u.id == id) for id in ids] user_loader = DataLoader(load_fn=load_users)
Klíčový takeaway¶
GraphQL pro complex frontend requirements. DataLoader řeší N+1 problem. REST pro jednoduché CRUD.