跳到内容

GraphQL

由于 FastAPI 基于 ASGI 标准,因此可以非常轻松地集成任何与 ASGI 兼容的 GraphQL 库。

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

提示

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

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

请确保您评估您用例的 好处 是否能弥补 缺点。 🤓

GraphQL 库

以下是一些支持 ASGIGraphQL 库。您可以将它们与 FastAPI 一起使用。

使用 Strawberry 的 GraphQL

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

根据您的具体用例,您可能更喜欢使用其他库,但如果问我,我可能会建议您尝试 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 的信息。

您也可以在上面链接的各自库的链接中阅读更多关于这些库的信息。