3. 编写您的第一个查询
最常用的GraphQL操作是查询,它以符合您的服务器模式的结构从您的图请求数据。Sandbox,您可以看到打开的Schema参考标签中可用的查询。
向下滚动到launches
查询以获取细节:
这里,您可以同时看到查询项本身、返回类型以及可以传递给查询的参数信息。您可以使用这些信息编写您最终将添加到您的应用程序中的查询。
要在沙盒资源管理器中开始使用此查询,请选择信息右侧的“播放”按钮:
这会将您带回到沙盒的资源管理器标签页,左侧侧边栏将显示所选查询的文档:
请注意启动
图标旁边的小按钮。单击此按钮将查询添加到中间的《操作》面板:
查询添加后,将呈现如下:
让我们分析一下这里您所看到的
- 操作类型为
查询
,其后跟随操作名称,目前为Query
(我们将在稍后使其更具体),这是最外层的括号集。 - 实际被调用的查询是下一组内部的括号。由于此查询的参数都具有默认值,它们不会被自动添加到查询中。
- 在括号之间的空白区域存在错误,这就是您将放置返回的每个
启动
所需要的信息列表的位置。
尽管Apollo Kotlin SDK不要求每个查询都必须有名字(即使GraphQL规范没有要求这样做),但您打算创建多个查询,因此最好也为此操作指定一个不同于Query
的具体名称。将操作名称更改为LaunchList
:
接下来,在左侧,您可以选择您想要在返回对象中回显的字段。首先,点击位于游标
旁边的按钮。它将标记该字段为已选,然后将它插入到您的操作中:
这可能是在对象中添加字段的最简单方法,因为它知道一切如何拼写以及在什么类型。
但是,您也可以使用自动完成功能来帮助您完成。在《操作》面板中在游标
下面添加新行并开始输入ha
。一个自动完成框会出现,并基于模式显示选项:
沙盒资源管理器是一个用于构建和验证查询的出色工具,这样您就不必在Android Studio中反复重新构建项目以测试更改。
正如架构图所示,执行 launches
查询将返回一个 LaunchConnection
对象。此对象包含一个 launches 列表,以及与分页相关的 字段(cursor
和 hasMore
)。您迄今为止编写的查询明确指定了要返回此 LaunchConnection
对象的哪些 字段。
按下“提交 操作”按钮运行这个 LaunchList
:
您将很快在页面右侧看到查询返回的结果作为一个 JSON 对象:
此 查询 执行成功,但未包含任何关于 launches
的信息!这是因为我们没有在查询中包含必要的 字段。
单击左侧列底部 launches
字段旁边的按钮。它将为 launches
添加一组在大括号中的操作,并随后将文档移动以显示关于 Launch
类型的信息:
在此组大括号中添加的字段将用于获取列表中每个 launch 的信息。单击 id
和 site
属性旁边的按钮以添加这两个 字段。完成之后,您的 operation 应该看起来像这样:
query LaunchList {launches {launches {idsite}}}
再次运行操作,现在您将看到除了之前返回的信息外,还得到了包含其 ID 和站点信息的 launches 列表:
将查询添加到您的项目中
现在您的 查询 正在获取正确的数据,请回到 Android Studio。
- 右键点击
src/main/graphql/
文件夹。这个文件夹应该包含您的schema.graphqls
。选择 新建 > 文件:
将文件命名为
LaunchList.graphql
。确保它和您的schema.graphqls
文件在同一级别保存。将您的最终 查询 从沙箱浏览器复制并粘贴到
LaunchList.graphql
中。
query LaunchList {launches {launches {idsite}}}
生成模型
构建您的项目以让 Apollo Kotlin 插件生成您的第一个模型。该插件定义了一个名为 generateApolloSources
的任务来生成模型。您不需要运行它。在构建项目时,它会自动执行。
注意:直到您构建项目,自动补全功能不会工作。这是因为自动补全需要生成的代码来工作。每次您更改查询时,都应重新构建您的项目,以便 Android Studio 能够拾取修改。
检查生成的代码
从菜单中选择 导航 > 类 并开始输入 LaunchList
,Android Studio 应建议打开 LaunchListQuery.kt
。该文件应在 app/build/generated/source/apollo/service/com/example/rocketreserver/LaunchListQuery.kt
。
该 LaunchListQuery.kt
文件定义了一个根类,LaunchListQuery
,带有许多嵌套类。如果您将这些类与沙箱浏览器返回的 JSON 数据进行比较,您会看到它们的结构匹配。这些类只包括您在 查询 中请求的 属性。
尝试注释掉 id
属性在 LaunchList.graphql
中,保存后再次构建。当构建完成时,Launch
类现在只包含请求的 site
属性。
取消注释 id
并重新构建以恢复该属性。
现在您已生成了代码并且有机会查看其中的内容,是时候 执行查询!