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 集成的小预览:
importstrawberryfromfastapiimportFastAPIfromstrawberry.fastapiimportGraphQLRouter@strawberry.typeclassUser:name:strage:int@strawberry.typeclassQuery:@strawberry.fielddefuser(self)->User:returnUser(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 的内容。
你也可以通过上面的链接阅读各个库的更多信息。







