Apollo Kotlin 中的片段
ⓘ 注意
本文描述了在 Apollo Kotlin 中使用默认的片段时的行为operationBased
代码生成器在 Apollo Kotlin 中的使用。对于responseBased
代码生成器,请参阅此页面。
Apollo Kotlin 支持GraphQL 片段两种形式:
命名片段
以下是一些GraphQL定义的例子:
Launch.graphql
# Declaration of named fragmentfragment LaunchFragment on Launch {idsitemission {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?)
使用此 fragment 的操作所生成的 operations 模型有一个 .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
看看这个使用两个内联 query 定义的示例:
HeroForEpisode.graphql
query HeroForEpisode($ep: Episode!) {hero(episode: $ep) {name... on Droid {primaryFunction}... on Human {height}}}
对于这个 operation,Apollo Kotlin 生成一个 Hero
类,该类包含 OnDroid
和 OnHuman
内嵌类。 Hero
还包括 onDroid
和 onHuman
字段,使您能够访问特定于 Droid
和 Human
的字段:
println("Droid primaryFunction: ${hero.onDroid?.primaryFunction}")println("Human height: ${hero.onHuman?.height}")
这些 on<ShapeName>
字段(onDroid
和 onHuman
)若返回的对象不是对应类型时将 null
。