FastAPI - 使用 GraphQL

Facebook 在 2012 年开发了 GraphQL,这是一种新的 API 标准,旨在优化 RESTful API 调用。 GraphQL 是 API 的数据查询和操作语言。 与 REST 相比,GraphQL 更加灵活、高效和准确。 GraphQL 服务器仅提供一个端点,并以客户端所需的精确数据进行响应。

由于 GraphQL 与 ASGI 兼容,因此可以轻松地与 FastAPI 应用程序集成。 GraphQL 有很多 Python 库。 下面列出了其中一些 −

  • Strawberry

  • Ariadne

  • Tartiflette

  • Graphene

FastAPI 的官方文档推荐使用 Strawberry 库,因为它的设计也是基于类型注释(就像 FastAPI 本身一样)。

为了将 GraphQL 与 FastAPI 应用程序集成,首先将 Python 类装饰为 Strawberry 类型。

@strawberry.type
class Book:
   title: str
   author: str
   price: int

接下来,声明一个包含返回 Book 对象的函数的 Query 类。

@strawberry.type
class Query:
   @strawberry.field
   def book(self) -> Book:
   return Book(title="Computer Fundamentals", author="Sinha", price=300)

使用这个Query类作为参数获取Strawberry.Schema对象

schema = strawberry.Schema(query=Query)

然后声明GraphQL类和FastAPI应用类的对象。

graphql_app = GraphQL(schema)
app = FastAPI()

最后,将路由添加到 FastAPI 对象并运行服务器。

app.add_route("/book", graphql_app)
app.add_websocket_route("/book", graphql_app)

在浏览器中访问 http://localhost:8000/book。 浏览器内的 GraphQL IDE 打开。

使用 GraphQL 的 FastAPI

在注释部分下方,使用 Graphiql IDE 的资源管理器栏输入以下查询。 运行查询以在输出窗格中显示结果。

使用 GraphQL 的 FastAPI