GraphQL¶
由于 FastAPI 基于 ASGI 标准,因此可以非常容易地集成任何与 ASGI 兼容的 GraphQL 库。
你可以在同一个应用程序中结合普通的 FastAPI 路径操作 和 GraphQL。
Tip
GraphQL 解决了某些特定的用例。
与常见的 Web API 相比,它有 优点 和 缺点。
确保你评估一下,对于你的用例,好处 是否能弥补 缺点。🤓
GraphQL 库¶
以下是一些支持 ASGI 的 GraphQL 库。你可以将它们与 FastAPI 一起使用:
- Strawberry 🍓
- 带有 FastAPI 文档
- Ariadne
- 带有 FastAPI 文档
- Tartiflette
- 带有 Tartiflette ASGI 提供 ASGI 集成
- Graphene
使用 Strawberry 的 GraphQL¶
如果你需要或想要使用 GraphQL,Strawberry 是 推荐 的库,因为它的设计最接近 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,它涵盖了相同的用例,并且具有 几乎相同的接口。
Tip
如果你需要 GraphQL,我仍然建议你查看 Strawberry,因为它基于类型注解而不是自定义类和类型。
了解更多¶
你可以在 官方 GraphQL 文档 中了解更多关于 GraphQL 的信息。
你也可以在上述库的链接中阅读更多关于它们的信息。