Graphql
正在阅读# GraphQL { #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.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,它覆盖了相同的用例并具有几乎相同的接口。
Tip
如果您需要 GraphQL,我仍然建议您查看 Strawberry,因为它基于类型注解而不是自定义类和类型。
了解更多¶
您可以在 官方 GraphQL 文档 中了解更多关于 GraphQL 的信息。
您也可以在上述链接中阅读更多关于这些库的信息。