如何解决Apollo GraphQL Swift 错误:[标量中不允许使用变量]
考虑查询:
query iotDevices {
devices_group_by_assets : device_func_devices(args: {search: {serialNo:"1234"}) {
asset
devices
}
}
这里的'device_func_devices'是一个在服务器端实现的函数,它接受输入'serialNo'并返回与serialNo匹配的设备。 “serialNo”实际上是设备内部返回的每个设备对象中的一个键值。
我们的服务器将这些设备作为 scalar JSON
发送,我们在客户端通过在构建脚本中使用 Array
将其转换为 --passthroughCustomScalars
。此处给出转换代码:
public typealias json = [[String : Any?]]
extension Array: JSONDecodable {
public init(jsonValue value: JSONValue) throws {
guard let array = value as? Array else {
throw JSONDecodingError.CouldNotConvert(value: value,to: Array.self)
}
self = array
}
}
现在,当我们调用上面的 API ApolloGraphQL 时会在代码中抛出错误 [variables are not allowed in scalars]
:
switch result {
case .success(let graphQLResult):
if let errors = graphQLResult.errors {
print("GRAPHQL ERRORS: \(errors)")
}
}
代码编译和 API.swift 生成没有问题。我可以理解我们无法搜索标量内的项目,因为其类型未知。但在这种情况下,搜索确实发生在服务器端,响应只包含标量对象。我们也不需要从缓存中进行本地搜索,因为我们总是使用 .fetchIgnoringCacheCompletely
。
我相信 Apollographql 应该返回正确的设备数组,因为在 apollo sdk 中没有发生实际搜索。
奇怪的是,Apollo-Android 和 Apollo-React 能够为此查询提供适当的数据。
我们现在被封锁了,请建议我们可以在这里做什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。