Strawberry GraphQL FastAPI Resolvers
Define a GraphQL schema with Strawberry on FastAPI, writing typed resolvers for queries and mutations with context dependency injection.
Code
import strawberry
from fastapi import FastAPI
from strawberry.fastapi import GraphQLRouter
BOOKS = {'b-1': {'title': 'Designing Data', 'pages': 320}}
def get_books() -> dict:
return BOOKS
@strawberry.type
class Book:
id: strawberry.ID
title: str
pages: int
@strawberry.type
class Query:
@strawberry.field
def book(self, id: strawberry.ID) -> Book | None:
record = get_books().get(str(id))
if record is None:
return None
return Book(id=id, title=record['title'], pages=record['pages'])
@strawberry.type
class Mutation:
@strawberry.mutation
def add_book(self, title: str, pages: int) -> Book:
new_id = f'b-{len(get_books()) + 1}'
get_books()[new_id] = {'title': title, 'pages': pages}
return Book(id=new_id, title=title, pages=pages)
schema = strawberry.Schema(query=Query, mutation=Mutation)
app = FastAPI()
app.include_router(GraphQLRouter(schema), prefix='/graphql')
# GraphQL 查询示例:
# query { book(id: "b-1") { title pages } }
# mutation { addBook(title: "GraphQL in Prod", pages: 240) { id } }Report a problem with this exampleOpens a pre-filled issue on GitHub.