Fastapi 简明教程

FastAPI - Using GraphQL

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

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

  1. Strawberry

  2. Ariadne

  3. Tartiflette

  4. Graphene

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

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

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

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

@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)

在浏览器中访问 [role="bare"] [role="bare"]http://localhost:8000/book 。一个内置浏览器的 GraphQL IDE 将被打开。

graph1

在注释部分的下面,使用 Graphiql IDE 的 Explorer 栏输入以下查询。运行查询以在输出窗格中显示结果。

graph2