GraphQL¶
由于 FastAPI 基于 ASGI 标准,因此集成任何兼容 ASGI 的 GraphQL 库都非常简单。
你可以在同一个应用程序中结合使用普通的 FastAPI 路径操作 和 GraphQL。
提示
GraphQL 解决了某些非常特定的使用场景。
与常见的 Web API 相比,它既有 优点 也有 缺点。
请确保评估你的使用场景中 收益 是否足以弥补其 劣势。🤓
GraphQL 库¶
以下是一些支持 ASGI 的 GraphQL 库,你可以在 FastAPI 中使用它们:
- Strawberry 🍓
- 提供 FastAPI 集成文档
- Ariadne
- 提供 FastAPI 集成文档
- Tartiflette
- 使用 Tartiflette ASGI 提供 ASGI 集成
- Graphene
使用 Strawberry 开发 GraphQL¶
如果你需要或想要使用 GraphQL,Strawberry 是 推荐 的库,因为它在设计上最接近 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 的信息。
你也可以通过上述链接阅读关于每个库的更多信息。