GraphQL¶
由於 FastAPI 基於 ASGI 標準,因此很容易整合任何也與 ASGI 相容的 GraphQL 函式庫。
您可以在同一個應用程式中結合普通的 FastAPI 路徑操作 和 GraphQL。
提示
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.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 的資訊。
您也可以在其連結中閱讀更多關於上述每個函式庫的資訊。