GraphQL¶
FastAPI 基于 ASGI 标准,因此能轻易地与任何兼容 ASGI 的 GraphQL 支持库集成。
您可以在同一个应用中把普通的 FastAPI 路径操作与 GraphQL 合并在一起使用。
Tip
GraphQL 用于解决一些非常特殊的用例。
它与普通的 Web API 各有利弊。
使用之前,请先评估您的用例,确保用它能够取长补短。🤓
GraphQL 支持库¶
下列 GraphQL 支持库都支持 ASGI,可用于 FastAPI:
- Strawberry 🍓
- 提供了 FastAPI 使用文档
- Ariadne
- 提供了 Starlette 使用文档(也可用于 FastAPI)
- Tartiflette
- 提供了 Tartiflette ASGI 以支持 ASGI 集成
- Graphene
GraphQL 与 Strawberry¶
推荐使用 Strawberry 实现 GraphQL,这个支持库的设计思路与 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 与 FastAPI。
Starlette 的旧版 GraphQLApp
¶
Starlette 以前的版本中包含了一个用于与 Graphene 集成的类 - GraphQLApp
。
Starlette 已经废弃了这个类,但如果您的代码里使用了这个类,迁移到 starlette-graphene3 也很简单,它支持同样的用例,接口也几乎一样。
Tip
要实现 GraphQL,我还是推荐使用 Strawberry,因为它不再使用传统的类与类型,而是基于类型提示。
扩展阅读¶
GraphQL 的更多内容,详见 GraphQL 官档。
点击本节正文中的支持库链接,也可以了解更多详情。