7. 查询入口点
5m

概述

让我们 feature 这些播放列表!

在本课中,我们将编写第一个入口点 使用 Query 类型。

回顾模型

A grid of featured playlists

对于此页面,我们需要检索在主页上推荐的播放列表对象列表。

我们建议与您的 消费者协作命名决策。对于此特定功能,我们希望 包含一个 featuredPlaylists Query 类型下,它是一个 Playlist 对象列表。

期望的 GraphQL 架构
type Query {
featuredPlaylists: [Playlist!]!
}

推荐的播放列表

记住, Query 类型是进入我们架构的入口点,所以让我们前往 api/query.py 文件。

对于 hello ,我们定义了一个单独的 函数,然后使用 strawberry.fieldresolver 指向该函数。

api/query.py
def get_hello():
return "Hello world"
@strawberry.type
class Query:
hello: str = strawberry.field(resolver=get_hello)

对于 featuredPlaylists ,我们将探索一种略有不同的方法,使用 strawberry.field 作为装饰器。

Query 类中,我们将添加一个名为 featured_playlists 的函数,它将返回一个 Playlist 类型列表。

api/query.py
class Query:
def featured_playlists() -> list[Playlist]:
...

Strawberry 自动将 snake_case 名称转换为 camelCase 在架构中,因此我们可以继续使用 Pythonic 的 snake_case 命名约定。

让我们现在编写一些硬编码的模拟数据。我们将返回三个 Playlist 实例的列表,传入 ID、名称,我们可以将播放列表的 description 留空。

api/query.py
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 函数作为 装饰器 到方法,在它前面加上 @

api/query.py
@strawberry.field
def featured_playlists() -> list[Playlist]:
...

这也是一个好习惯,在 self 中包含 函数。

api/query.py
@strawberry.field
def featured_playlists(self) -> list[Playlist]:
...

最后,别忘了 描述!

api/query.py
@strawberry.field(
description="Playlists hand-picked to be featured to all users."
)
def featured_playlists(self) -> list[Playlist]:

这种装饰器方法对于将 函数体与其类及其 放在一起非常有用。

最后,我们需要导入 Playlist 类型到文件顶部。

api/query.py
from .types.playlist import Playlist

点击保存,让我们开始

查询推荐的播放列表

回到 Sandbox,在 架构 页面仍然打开的情况下,让我们查看一下 Query 选项卡。

https://127.0.0.1:8000

Schema page with Query page open

我们在这里有了一个新的条目,用于我们的 featuredPlaylists !我们可以使用此页面通过点击 操作 列中的播放按钮快速在 Explorer 中构建

https://127.0.0.1:8000

Arrow to Play button under Actions

这将在 Explorer 中打开 文档 选项卡,显示 featuredPlaylists

在一个新的工作区选项卡中,让我们构建 来请求 idnamefield 对于每个 featuredPlaylists 中的播放列表。

https://127.0.0.1:8000

Explorer page with featured playlists query

提示:您可以使用“”旁边的 + 按钮一键添加所有字段!

GraphQL 操作
query FeaturedPlaylists {
featuredPlaylists {
id
name
description
}
}

运行查询... 然后跳起来跳舞,因为我们有了我们喜欢的播放列表! 🕺💃

https://127.0.0.1:8000

Response data

检查 JSON 响应的形状,我们可以看到它遵循我们 的形状,这是 的优点之一。我们可以在 data 键下看到,我们有一个名为 featuredPlaylists (与我们的 同名)的属性,它返回一个列表。对于列表中的每个对象,我们都有与 Playlist 类型关联的字段:idnamedescription

我们也可以在表格视图中看到这一点,以便更紧凑、更易于扫描的视图。

https://127.0.0.1:8000

Response data table view

在我们继续之前,让我们清理 Hello World 示例。从 Query 类型中删除 hello ,以及相应的 get_hello 函数。

api/query.py
- def get_hello():
- return "Hello world"
@strawberry.type
class Query:
- hello: str = strawberry.field(resolver=get_hello)

现在 Playlist 类型可以通过 Query 类型中的入口点访问,我们也可以清理我们的架构初始化。Strawberry 会自动将类型添加到我们的架构中,如果它们被任何 使用,在本例中,Playlist 类型被 featured_playlists 使用,该解析器位于我们的 Query 中。

打开 api/schema.py,从架构中删除 types ,以及顶部的 Playlist 导入。

schema.py
- from .types.playlist import Playlist
...
-schema = strawberry.Schema(query=Query, types=[Playlist])
+schema = strawberry.Schema(query=Query)

关键要点

  • Query 类型充当 的入口点。
  • 您可以使用 @strawberry.field 定义 用于类型上的
  • Strawberry 会自动将 snake_case 名称转换为 camelCase 在架构中。

下一步

那些有趣的播放列表都是硬编码的!在下一课中,我们将深入研究 Spotify Web API,一个我们将用作 的 REST API,用于我们的

上一页

分享您对本课的疑问和评论

本课程目前处于

beta
.您的反馈有助于我们改进!如果您遇到困难或困惑,请告诉我们,我们会帮助您。所有评论都是公开的,必须遵循 Apollo 行为准则。请注意,已解决或已解决的评论可能会被删除。

您需要一个 GitHub 帐户才能在下方发布。还没有帐户? 请在我们的 Odyssey 论坛中发布。