跳转至

GraphQL

FastAPI 基于 ASGI 标准,因此能轻易地与任何兼容 ASGI 的 GraphQL 支持库集成。

您可以在同一个应用中把普通的 FastAPI 路径操作与 GraphQL 合并在一起使用。

Tip

GraphQL 用于解决一些非常特殊的用例。

它与普通的 Web API 各有利弊。

使用之前,请先评估您的用例,确保用它能够取长补短。🤓

GraphQL 支持库

下列 GraphQL 支持库都支持 ASGI,可用于 FastAPI

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 官档

点击本节正文中的支持库链接,也可以了解更多详情。