10月8日至10日与我们在纽约市一起学习关于 GraphQL 联邦和 API 平台工程的最新技巧、趋势和新闻。加入我们参加2024年纽约市的 GraphQL Summit
文档
免费开始

Apollo Kotlin 中的片段


注意

本文描述了在 Apollo Kotlin 中使用默认的时的行为operationBased代码生成器在 Apollo Kotlin 中的使用。对于responseBased代码生成器,请参阅此页面

Apollo Kotlin 支持GraphQL 片段两种形式:

  • 命名片段,允许您在多个中重用一组
  • 内联片段,允许您访问多态类型的字段。

命名片段

以下是一些定义的例子:

Launch.graphql
# Declaration of named fragment
fragment LaunchFragment on Launch {
id
site
mission {
name
}
}
query LaunchDetails($id:ID!) {
launch(id: $id) {
# Usage of named fragment
...LaunchFragment
}
}

根据 fragment 定义,Apollo Kotlin 生成以下 LaunchFragment 类,您可以在不同的查询中重复使用:

LaunchFragment.kt
data class LaunchFragment(
val id: String,
val site: String?,
val mission: Mission?
)

使用此 的操作所生成的 模型有一个 .launchFragment 属性来访问 fragment 的字段:

println("Mission site: ${launch.launchFragment?.site}")

如果返回的对象不是 不是一个 Launch.launchFragment 属性将是 null

您可以在任何数量的操作中重复使用 fragment:

Launch.graphql
# ...previous definitions...
query LaunchList {
launches {
launches {
...LaunchFragment
}
}
}

您甚至可以在定义于不同 .graphql 文件的操作中使用 fragment。这是由于 Apollo Kotlin codegen 在生成模型之前将所有 .graphql 文件合并到一个 单个 文件中。

内联 fragments

看看这个使用两个内联 定义的示例:

HeroForEpisode.graphql
query HeroForEpisode($ep: Episode!) {
hero(episode: $ep) {
name
... on Droid {
primaryFunction
}
... on Human {
height
}
}
}

对于这个 operationApollo Kotlin 生成一个 Hero 类,该类包含 OnDroidOnHuman 内嵌类。 Hero 还包括 onDroidonHuman 字段,使您能够访问特定于 DroidHuman 的字段:

println("Droid primaryFunction: ${hero.onDroid?.primaryFunction}")
println("Human height: ${hero.onHuman?.height}")

这些 on<ShapeName> 字段onDroidonHuman)若返回的对象不是对应类型时将 null

上一页
自定义标量
下一页
@defer 支持
评分文章评分在 GitHub 上编辑编辑论坛Discord

版权所有2024Apollo Graph Inc.,即 Apollo GraphQL。

隐私政策

公司