Strawberry 简介#
参考:Strawberry
安装:
pip install 'strawberry-graphql[debug-server]'
定义模式#
每个 GraphQL 服务器都使用 模式 (schema)来定义客户端可以查询的数据结构。在本例中,将创建服务器,用于按标题和作者查询图书集合。
在你最喜欢的编辑器中创建名为 schema.py
的文件,包含以下内容:
import strawberry
@strawberry.type
class Book:
title: str
author: str
@strawberry.type
class Query:
books: list[Book]
这将创建 GraphQL 模式,其中客户端将能够执行名为 books
的查询,该查询将返回包含零本或多本图书的列表。
定义数据集#
有了模式的结构,可以定义数据本身了。Strawberry 可以使用任何数据源(例如数据库、REST API、文件等)。在本教程中,将使用硬编码数据。
创建返回一些书的函数。
def get_books():
return [
Book(
title="The Great Gatsby",
author="F. Scott Fitzgerald",
),
]
因为 strawberry 使用 python 类来创建模式,这意味着也可以重用它们来创建数据对象。
定义解析器#
有返回一些书籍的函数,但是 Strawberry 不知道在执行查询时应该使用它。为了解决这个问题,需要更新我们的查询来为图书指定解析器(resolver)。解析器告诉 Strawberry 如何获取与特定字段相关的数据。
更新我们的查询:
@strawberry.type
class Query:
books: list[Book] = strawberry.field(resolver=get_books)
使用 strawberry.field
允许为特定的字段指定解析器。
备注
不需要为 Book 的字段指定任何解析器,这是因为 Strawberry 为每个字段添加了默认值,返回该字段的值。
创建模式并运行它#
已经定义了数据和查询,现在需要做的是创建 GraphQL 模式并启动服务器。要创建模式,添加以下代码:
schema = strawberry.Schema(query=Query)
执行如下命令:
strawberry server schema
这将启动调试服务器,你应该看到以下输出:
Running strawberry on http://0.0.0.0:8000/graphql 🍓
执行第一个查询#
现在可以执行 GraphQL 查询了。Strawberry 附带了名为 GraphiQL 的工具。打开它,请访问 http://0.0.0.0:8000/graphql
,你应该会看到这样的东西:
GraphiQL UI 包括:
用于编写查询的文本区域(左侧)
用于执行查询的 Play 按钮(中间的三角形按钮)
用于查看查询结果的文本区域(右侧)
用于检查模式和生成文档的视图(通过右侧的选项卡)
服务器支持名为 books
的查询。让我们执行它!将以下字符串粘贴到左侧区域,然后单击播放按钮:
{
books {
title
author
}
}
应该看到硬编码的数据出现在右边:
GraphQL 允许客户端只查询需要的字段,然后从查询中删除 author
并再次运行它。响应现在应该只显示每本书的标题。