GraphQL¶
由于 FastAPI 基于 ASGI 标准,因此很容易集成任何也兼容 ASGI 的 GraphQL 库。
你可以在同一个应用中将常规的 FastAPI 路径操作与 GraphQL 结合使用。
提示
GraphQL 解决一些非常特定的用例。
与常见的 Web API 相比,它有各自的优点和缺点。
请确保评估在你的用例中,这些好处是否足以弥补这些缺点。 🤓
GraphQL 库¶
以下是一些支持 ASGI 的 GraphQL 库。你可以将它们与 FastAPI 一起使用:
- Strawberry 🍓
- Ariadne
- Tartiflette
- 提供用于 ASGI 集成的 Tartiflette ASGI
- Graphene
- 可配合 starlette-graphene3 使用
使用 Strawberry 的 GraphQL¶
如果你需要或想要使用 GraphQL,Strawberry 是推荐的库,因为它的设计与 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 与 FastAPI 结合使用的文档。
Starlette 中较早的 GraphQLApp¶
早期版本的 Starlette 包含一个 GraphQLApp 类,用于与 Graphene 集成。
它已在 Starlette 中被弃用,但如果你的代码使用了它,你可以轻松迁移到 starlette-graphene3,它覆盖相同的用例,且接口几乎完全一致。
提示
如果你需要 GraphQL,我仍然建议看看 Strawberry,因为它基于类型注解而不是自定义类和类型。
了解更多¶
你可以在 GraphQL 官方文档中了解更多关于 GraphQL 的内容。
你也可以通过上面的链接阅读各个库的更多信息。