在Apollo Kotlin中使用GraphQL变量
GraphQL支持将参数值传递给您的操作,您可以使用变量以重用具有多个变量值的单一查询(这是推荐的最佳实践)。
在 GraphQL 中,非空变量是必需的,而空变量是可选的。然而,由于在实际操作中很少省略变量,Apollo Kotlin 提供了一种机制,在生成的代码中使变量成为非可选的。这使得生成的代码结构更加直接。
由于您可能仍然需要省略 变量,默认情况下将它们生成为可选的,但您可以根据特定变量或全局配置来设置这一点。
考虑以下包含两个空变量的 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))
将可空变量变为必须的
要全局禁用可选变量,请按如下方式更新您的Gradle配置:
apollo {service("service") {// ...generateOptionalOperationVariables.set(false)}}
如果您这样做,在以下GetTodos
查询示例中,Apollo Kotlin现在生成以下代码:
class GetTodosQuery(val first: Int?, val offset: Int?)
这使得调用代码更简洁
// Provide null for both variablesval query = GetTodosQuery(null, null)// Send explicit values for both variablesval query = GetTodosQuery(100, 0)
如果您为这些null
任何这些变量传递的值为