跳至內容

GraphQL

由於 FastAPI 基於 ASGI 標準,因此很容易整合任何也與 ASGI 相容的 GraphQL 函式庫。

您可以在同一個應用程式中結合普通的 FastAPI 路徑操作 和 GraphQL。

提示

GraphQL 解決了一些非常特定的使用案例。

與常見的 Web API 相比,它有優點缺點

請務必評估您的使用案例的益處是否足以彌補缺點。🤓

GraphQL 函式庫

以下是一些支援 ASGIGraphQL 函式庫。您可以將它們與 FastAPI 一起使用

使用 Strawberry 的 GraphQL

如果您需要或想要使用 GraphQL建議使用 Strawberry 函式庫,因為它的設計與 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 的資訊。

還有關於 Strawberry 與 FastAPI 的文件。

Starlette 舊版 GraphQLApp

Starlette 的先前版本包含一個 GraphQLApp 類別,用於與 Graphene 整合。

它已從 Starlette 中棄用,但如果您有使用它的程式碼,您可以輕鬆地遷移starlette-graphene3,它涵蓋了相同的用例,並且具有幾乎相同的介面

提示

如果您需要 GraphQL,我仍然建議您查看 Strawberry,因為它是基於類型註釋而不是自定義類別和類型。

了解更多

您可以在 GraphQL 官方文件 中了解更多關於 GraphQL 的資訊。

您也可以在其連結中閱讀更多關於上述每個函式庫的資訊。