加入我们,于10月8日至10日在纽约市,了解有关GraphQL联邦和API平台工程的最新技巧、趋势和新闻。加入我们,纽约市GraphQL峰会2024年
文档
免费开始

Apollo Kotlin中的查询


以可预测、类型安全的方式获取数据是Apollo Kotlin的核心功能之一。在本指南中,您将了解如何一个端点,并在您的应用程序中使用结果。

先决条件

此页面假设您对构建GraphQL查询有一定了解。为了重温,我们建议阅读此指南阅读此指南并练习在Apollo沙盒中运行查询

因为Apollo Kotlin使用标准GraphQL语法,在沙盒中您运行的任何query也可以放入.graphql文件中。

此页面还假设您已为您的Android/Kotlin应用程序设置了Apollo Kotlin。有关设置的帮助,请参阅入门指南

定义

Apollo Kotlin中,每个您执行的query都表示为生成的类的实例,该类实现了Query接口。为了生成这些类,我们首先需要定义想要执行的GraphQL操作。

假设我们定义了一个名为GraphQL的查询HeroQuery,如下所示:

HeroQuery.graphql
query HeroQuery($id: String!) {
hero(id: $id) {
id
name
appearsIn
}
}

Apollo Kotlin将为它生成一个对应的HeroQuery类,我们可以使用这个类来执行查询

要生成类,Apollo Kotlin需要你的服务器模式,以及包含所有.graphql的文件,这些文件包含你定义的操作。

你的项目中的所有.graphql文件都将合并并作为一个单个 GraphQL处理。

执行

为了执行刚才定义的查询,我们将HeroQuery实例传递给ApolloClientquery方法,如下所示:

val apolloClient = ApolloClient.Builder().serverUrl("https://example.com/graphql").build()
val response = apolloClient.query(HeroQuery(id = "12")).execute()

默认情况下,Apollo Kotlin将I/O工作卸载到后台线程上,这意味着在主线程上启动GraphQL操作是安全的。

  • 在Android和JVM上,I/O工作默认使用Dispatchers.IO。您可以使用ApolloClient.Builder.dispatcher来更改此调度器。
  • Kotlin/native(iOS、macOS等),请求将缓存和网络I/O卸载到后台线程,这些线程将在主调度队列中恢复。因此,ApolloClientAPI假定它们是在主线程上调用的。无法自定义调度器,但缓存和网络I/O始终在后台线程中完成。

结果

查询的结果以不可变类的层次结构返回,这与查询的字段结构相匹配。这些类仅包括查询中包含的字段(其他模式字段被省略)。

换句话说, Apollo Kotlin根据您编写的查询生成类,而非根据您查询的模式。

例如,给定以下模式

enum Episode { NEWHOPE, EMPIRE, JEDI }
interface Character {
id: String!
name: String!
friends: [Character]
appearsIn: [Episode]!
}

和以下 查询:

query HeroAndFriendsNames {
hero {
name
friends {
id
name
}
}
}

Apollo Kotlin生成一个类型安全的模型,如下所示(省略详细信息以关注类结构):

class HeroAndFriendsNamesQuery {
data class Data(val hero: Hero)
data class Hero(val name: String, friends: List<Friend>)
data class Friend(val id: String, val name: String)
}

因为 HeroAndFriendsNames 查询未获取 appearsIn,这个属性不是返回结果类型的一部分,无法在此访问。类似地,id只能在 Friend,而不是在 Hero中。

因为 GraphQL支持可以为null,您有编译时的类型安全。如果请求成功,所有查询数据(仅此数据)将可访问。无需在UI代码中处理null字段。

取消

的取消是通过CoroutineScope处理的。取消当前作用域会取消任何相关的正在进行的操作。

上一页
客户端意识
下一页
突变
评价文章评价在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,商业名称为Apollo GraphQL。

隐私政策

公司