python Fastapi +草莓GraphQL

hfyxw5xn  于 2023-01-29  发布在  Python
关注(0)|答案(2)|浏览(218)

我目前正在用fastapi构建一个微服务。
我想通过graphql在一个额外的路径上公开我的底层数据,直接从starlette集成已经被弃用,所以我尝试使用推荐的包strawberry之一,目前,它似乎不可能与grapqhl结合使用。

示例

my_grapqhql.py

from typing import List
import strawberry

@strawberry.type
class Book:
    title: str
    author: str

@strawberry.type
class Query:
    books: List[Book]

schema = strawberry.Schema(query=Query)

我所尝试的

在fastapi文档中,asgi组件是这样添加的:
main.py

from fastapi import FastAPI
from strawberry.asgi import GraphQL
from .my_graphql.py import schema

app = FastAPI()
app.add_middleware(GraphQL, schema=schema)

不幸的是,这不起作用:
TypeError: __init__() got an unexpected keyword argument 'app'
当我切换最后一行来挂载模块时,至少启动:

app.mount("/graphql", GraphQL(schema))

但这条路线没有加载。

6tqwzwtp

6tqwzwtp1#

这已记录在以下位置:www.example.comhttps://strawberry.rocks/docs/integrations/fastapi#fastapi
从文件上看

import strawberry

from fastapi import FastAPI
from strawberry.fastapi import GraphQLRouter

@strawberry.type
class Query:
    @strawberry.field
    def hello(self) -> str:
        return "Hello World"

schema = strawberry.Schema(Query)

graphql_app = GraphQLRouter(schema)

app = FastAPI()
app.include_router(graphql_app, prefix="/graphql")
uqdfh47h

uqdfh47h2#

使用FastApi添加Strawberry的新方法也在文档中

app = FastAPI()
schema = strawberry.Schema(query=Query,mutation=Mutation,config=StrawberryConfig(auto_camel_case=True))
graphql_app = GraphQLRouter(schema)
app.include_router(graphql_app, prefix="/graphql")

相关问题