跳到内容

GraphQL

由于 FastAPI 基于 ASGI 标准,因此集成任何兼容 ASGI 的 GraphQL 库都非常简单。

你可以在同一个应用程序中结合使用普通的 FastAPI 路径操作 和 GraphQL。

提示

GraphQL 解决了某些非常特定的使用场景。

与常见的 Web API 相比,它既有 优点 也有 缺点

请确保评估你的使用场景中 收益 是否足以弥补其 劣势。🤓

GraphQL 库

以下是一些支持 ASGIGraphQL 库,你可以在 FastAPI 中使用它们:

使用 Strawberry 开发 GraphQL

如果你需要或想要使用 GraphQLStrawberry推荐 的库,因为它在设计上最接近 FastAPI,完全基于 类型注解 (type annotations)

根据你的使用场景,你可能更倾向于使用其他库,但如果让我建议,我可能会建议你尝试使用 Strawberry

以下是将 Strawberry 集成到 FastAPI 的简要示例预览:

import strawberry
from fastapi import FastAPI
from strawberry.fastapi import GraphQLRouter


@strawberry.type
class User:
    name: str
    age: int


@strawberry.type
class Query:
    @strawberry.field
    def user(self) -> User:
        return User(name="Patrick", age=100)


schema = strawberry.Schema(query=Query)


graphql_app = GraphQLRouter(schema)

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

你可以通过 Strawberry 文档 了解更多关于 Strawberry 的信息。

以及关于 Strawberry 集成 FastAPI 的文档。

Starlette 中旧的 GraphQLApp

Starlette 的先前版本包含一个 GraphQLApp 类,用于与 Graphene 集成。

它已被 Starlette 弃用,但如果你有正在使用它的代码,你可以轻松 迁移starlette-graphene3,它涵盖了相同的使用场景,并且具有 几乎相同的接口

提示

如果你需要 GraphQL,我仍然建议你查看 Strawberry,因为它基于类型注解,而不是自定义类和类型。

了解更多

你可以通过 GraphQL 官方文档 了解更多关于 GraphQL 的信息。

你也可以通过上述链接阅读关于每个库的更多信息。