为什么我在使用来自 FastAPI 的 APIRouter 时看不到 GraphQL App

Why I do not see GraphQL App when using APIRouter from FastAPI

我不明白,为什么我看不到像this这样的界面 从 FastAPI 使用 APIRouter 时。

我的服务是这样的:

class GraphqlService(graphene.ObjectType):
    hello = graphene.String(name=graphene.String(default_value="stranger"))

    @staticmethod
    def resolve_hello(self, info, name):
        return "Hello " + name

并像这样查看:

router = APIRouter()

graphql_app = GraphQLApp(schema=graphene.Schema(query=GraphqlService), executor_class=AsyncioExecutor)

@router.get('/db_article', response_model=Union[Article, ArticleNotFound])
async def db_articles(request):
      return await graphql_app.handle_graphql(request)

但是,当我访问 http://localhost:8089/myAPI/v1/db_article 时, 我得到一个错误:{"detail":[{"loc":["query","request"],"msg":"field required","type":"value_error.missing"}]}

你的函数签名中有一个请求参数。如果这应该是进入 FastAPI 的请求,您需要这样输入:

from fastapi import Request

....

async def db_articles(request: Request):

.. 否则 FastAPI 自动假定它是一个查询参数。如果您阅读了链接的示例代码,他们会直接从应用程序而不是通过辅助视图注册路线。

app = FastAPI()
app.add_route("/", GraphQLApp(schema=graphene.Schema(query=Query)))