概述
让我们 feature 这些播放列表!
在本课中,我们将编写第一个入口点GraphQL 架构 使用 Query
类型。
回顾模型
对于此页面,我们需要检索在主页上推荐的播放列表对象列表。
我们建议与您的 graph 消费者协作命名决策。对于此特定功能,我们希望 GraphQL 架构 包含一个 featuredPlaylists
字段 在 Query
类型下,它是一个 Playlist
对象列表。
type Query {featuredPlaylists: [Playlist!]!}
推荐的播放列表
记住, Query
类型是进入我们架构的入口点,所以让我们前往 api/query.py
文件。
对于 hello
字段,我们定义了一个单独的 解析器 函数,然后使用 strawberry.field
的 resolver
参数 指向该函数。
def get_hello():return "Hello world"@strawberry.typeclass Query:hello: str = strawberry.field(resolver=get_hello)
对于 featuredPlaylists
字段,我们将探索一种略有不同的方法,使用 strawberry.field
作为装饰器。
在 Query
类中,我们将添加一个名为 featured_playlists
的函数,它将返回一个 Playlist
类型列表。
class Query:def featured_playlists() -> list[Playlist]:...
Strawberry 自动将 snake_case
字段 名称转换为 camelCase
在架构中,因此我们可以继续使用 Pythonic 的 snake_case
命名约定。
让我们现在编写一些硬编码的模拟数据。我们将返回三个 Playlist
实例的列表,传入 ID、名称,我们可以将播放列表的 description
字段 留空。
return [Playlist(id="1", name="GraphQL Groovin'", description=None),Playlist(id="2", name="Graph Explorer Jams", description=None),Playlist(id="3", name="Interpretive GraphQL Dance", description=None),]
为了使此函数成为 解析器,我们将使用 strawberry.field
函数作为 装饰器 到方法,在它前面加上 @
。
@strawberry.fielddef featured_playlists() -> list[Playlist]:...
这也是一个好习惯,在 self
的 参数 中包含 解析器 函数。
@strawberry.fielddef featured_playlists(self) -> list[Playlist]:...
最后,别忘了 GraphQL 描述!
@strawberry.field(description="Playlists hand-picked to be featured to all users.")def featured_playlists(self) -> list[Playlist]:
这种装饰器方法对于将 解析器 函数体与其类及其 字段 放在一起非常有用。
最后,我们需要导入 Playlist
类型到文件顶部。
from .types.playlist import Playlist
点击保存,让我们开始 查询!
查询推荐的播放列表
回到 Sandbox,在 架构 页面仍然打开的情况下,让我们查看一下 Query
选项卡。
我们在这里有了一个新的条目,用于我们的 featuredPlaylists
字段!我们可以使用此页面通过点击 字段 下 操作 列中的播放按钮快速在 Explorer 中构建 查询。
这将在 Explorer 中打开 文档 选项卡,显示 featuredPlaylists
字段。
在一个新的工作区选项卡中,让我们构建 查询 来请求 id
、name
和 field
对于每个 featuredPlaylists
中的播放列表。
提示:您可以使用“字段”旁边的 + 按钮一键添加所有字段!
query FeaturedPlaylists {featuredPlaylists {idnamedescription}}
运行查询... 然后跳起来跳舞,因为我们有了我们喜欢的播放列表! 🕺💃
检查 JSON 响应的形状,我们可以看到它遵循我们 查询 的形状,这是 GraphQL 的优点之一。我们可以在 data
键下看到,我们有一个名为 featuredPlaylists
(与我们的 字段 同名)的属性,它返回一个列表。对于列表中的每个对象,我们都有与 Playlist
类型关联的字段:id
、name
和 description
。
我们也可以在表格视图中看到这一点,以便更紧凑、更易于扫描的视图。
在我们继续之前,让我们清理 Hello World 示例。从 Query
类型中删除 hello
字段,以及相应的 get_hello
解析器 函数。
- def get_hello():- return "Hello world"@strawberry.typeclass Query:- hello: str = strawberry.field(resolver=get_hello)
现在 Playlist
类型可以通过 Query
类型中的入口点访问,我们也可以清理我们的架构初始化。Strawberry 会自动将类型添加到我们的架构中,如果它们被任何 解析器 使用,在本例中,Playlist
类型被 featured_playlists
解析器 使用,该解析器位于我们的 Query
中。
打开 api/schema.py
,从架构中删除 types
参数,以及顶部的 Playlist
导入。
- from .types.playlist import Playlist...-schema = strawberry.Schema(query=Query, types=[Playlist])+schema = strawberry.Schema(query=Query)
关键要点
- 该
Query
类型充当 GraphQL 架构 的入口点。 - 您可以使用
@strawberry.field
定义 解析器 用于类型上的 字段。 - Strawberry 会自动将
snake_case
字段 名称转换为camelCase
在架构中。
下一步
那些有趣的播放列表都是硬编码的!在下一课中,我们将深入研究 Spotify Web API,一个我们将用作 数据源 的 REST API,用于我们的 GraphQL 服务器。
分享您对本课的疑问和评论
本课程目前处于
您需要一个 GitHub 帐户才能在下方发布。还没有帐户? 请在我们的 Odyssey 论坛中发布。