在Apollo Kotlin中使用GraphQL变量
GraphQL支持将参数值传递给您的操作与变量. 这使得您可以编写单个 查询,您可以使用多个 变量值进行重用(这是 推荐的最佳实践)。
在 GraphQL 中,非空 变量是必须的,而空变量始终是可选的。Apollo Kotlin使用它自己的 Optional
类型来区分存在(但可能为空)和不存在类型。
考虑以下具有两个空变量 GraphQL 查询:
query GetTodos($first: Int, $offset: Int) {todos(first: $first, offset: $offset) {idtext}}
Apollo Kotlin 为此 查询 生成以下 Kotlin 代码:
class GetTodosQuery(val first: Optional<Int?> = Optional.Absent,val offset: Optional<Int?> = Optional.Absent)
您可以有选择地提供或省略如下所示的变量值:
// Omit values for both variablesval query = GetTodosQuery(Optional.Absent, Optional.Absent)// Provide null for both variablesval query = GetTodosQuery(Optional.Present(null), Optional.Present(null))// Send explicit values for both variablesval query = GetTodosQuery(Optional.Present(100), Optional.Present(0))
使用输入构建器
对于操作和输入对象,需要将值包裹在Optional
包装器可能会很麻烦。
在这种情况下,请使用generateInputBuilders
:
apollo {service("service") {// ...generateInputBuilders.set(true)}}
如果你这样做,在上面的GetTodos
查询的情况下,Apollo Kotlin现在为每个操作生成一个Builder
:
// Omit values for both variablesval query = GetTodosQuery.Builder().build()// Provide null for both variablesval query = GetTodosQuery.Builder().first(null).offset(null).build()// Send explicit values for both variablesval query = GetTodosQuery.Builder().first(100).offset(0).build()