跳至内容

GraphQL

由于 FastAPI 基于 ASGI 标准,因此非常容易集成任何也与 ASGI 兼容的 GraphQL 库。

您可以将普通的 FastAPI 路径操作与同一个应用程序上的 GraphQL 结合使用。

提示

GraphQL 解决了一些非常具体的用例。

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

确保评估您的用例是否值得使用带来的好处来弥补缺点。🤓

GraphQL 库

以下是一些具有 ASGI 支持的 GraphQL 库。您可以将它们与 FastAPI 一起使用

使用 Strawberry 的 GraphQL

如果您需要或希望使用 GraphQLStrawberry推荐的库,因为它具有最接近 FastAPI 设计的设计,它完全基于类型注解

根据您的用例,您可能更喜欢使用不同的库,但如果您问我,我可能会建议您尝试 Strawberry

以下是您可以将 Strawberry 集成到 FastAPI 中的简要预览

import strawberry
from fastapi import FastAPI
from strawberry.asgi import GraphQL


@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 = GraphQL(schema)

app = FastAPI()
app.add_route("/graphql", graphql_app)
app.add_websocket_route("/graphql", graphql_app)

您可以在 Strawberry 文档 中了解有关 Strawberry 的更多信息。

以及有关 Strawberry 与 FastAPI 的文档。

来自 Starlette 的旧版 GraphQLApp

早期版本的 Starlette 包含一个 GraphQLApp 类来与 Graphene 集成。

它已从 Starlette 中弃用,但如果您有使用它的代码,您可以轻松地迁移starlette-graphene3,它涵盖了相同的用例并且具有几乎相同的接口

提示

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

了解更多

您可以在 官方 GraphQL 文档 中了解有关 GraphQL 的更多信息。

您还可以阅读上面链接中描述的每个库的更多信息。