FastAPI - 使用 GraphQL


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

由于 GraphQL 与 ASGI 兼容,因此可以轻松与 FastAPI 应用程序集成。有许多适用于 GraphQL 的 Python 库。其中一些列于下面 -

  • 草莓

  • 阿里亚德涅

  • 塔蒂夫莱特

  • 石墨烯

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