from fastapi import FastAPI, Request
import strawberry
from strawberry.asgi import GraphQL
from strawberry.fastapi import GraphQLRouter
from pydantic import BaseModel, Field
from typing import List, Optional, Union
app = FastAPI()
@strawberry.type
class User(BaseModel):
name: str
age: int
@strawberry.type
class Student:
name: str
age: int
@strawberry.type
class Teacher:
id: int
name: str
age: int
students: List[Student]
teachers = [
{
'id': 1,
'name': 'gao',
'age': 30,
'students': [Student(name='aaa', age=10), Student(name='bbb', age=10)]
},
{
'id': 2,
'name': 'feng',
'age': 20,
'students': [Student(name='ccc', age=10), Student(name='ddd', age=10)]
}
]
@strawberry.type
class Query:
@strawberry.field
def user1(self) -> User:
return User(name="Patrick", age=100)
@strawberry.field
def teacher(self, id: Optional[int] = None, id_gt1: Optional[int] = None) -> List[Teacher]:
if id:
return [Teacher(**(teachers[0]))]
return [Teacher(**t) for t in teachers]
schema = strawberry.Schema(query=Query)
async def get_context(request: Request):
print(request.base_url)
print(request.url)
print(request.scope.get('path'))
graphql_app = GraphQLRouter(schema, context_getter=get_context)
app.include_router(graphql_app, prefix="/graphql")
if __name__ == '__main__':
import uvicorn
DEBUG = True
HOST = "127.0.0.1"
PORT = 9000
WORKERS = 1
uvicorn.run('main:app', host=HOST, port=PORT,
reload=DEBUG)
Fastapi使用GraphQL
最新推荐文章于 2024-06-17 09:50:07 发布