加入我们,在 10 月 8-10 日于纽约市,了解最新关于 GraphQL Federation 和 API 平台工程的技巧、趋势和新闻。加入我们,参加 2024 年纽约市的 GraphQL Summit
文档
免费开始
您正在查看该软件先前版本的文档。 切换到最新稳定版本。

Apollo Kotlin中的片段


注意:本文描述了当使用默认的时的行为。operationBased代码生成在中。对于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文件合并到一个单个文件中。

内联片段

请查看这个使用两个内联定义的片段:

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

对于此操作,Apollo 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 为名。

隐私政策

公司