所有 GraphQL 标量都以字符串形式出现 (Apollo)

Kun*_*pta 3 ios apollo swift graphql apollo-client

我正在使用 Apollo 客户端进行 GraphQL 客户端集成。我添加了以下运行脚本,这是官方文档中建议的。

cd "${SRCROOT}/${TARGET_NAME}/GraphQL/Open"
$APOLLO_FRAMEWORK_PATH/check-and-run-apollo-codegen.sh generate $(find 
. -name '*.graphql') --schema schema.json 
 --output APIClient.swift
Run Code Online (Sandbox Code Playgroud)

但是出现的问题是所有标量现在都以字符串形式出现。

例如:- 在登录时,如果我创建了电子邮件和密码的变更,我的架构将响应作为 JSON 返回,而创建的 APIClient 将响应显示为字符串(而不是 JSON)。

因此,收到了一个错误,上面写着

Apollo.GraphQLResultError(path: ["login", "response"], underlying: Apollo.JSONDecodingError.couldNotConvert
Run Code Online (Sandbox Code Playgroud)

这是因为接收的是 String 而不是 JSON,并且字符串无法转换为所需的 JSON。

有没有人面临同样的问题?

Kun*_*pta 5

所以我已经想通了。解决方法是添加

--passthrough-custom-scalars
Run Code Online (Sandbox Code Playgroud)

在运行脚本中。这将传递像 JSON 这样的自定义标量。所以完整的运行脚本变成

cd "${SRCROOT}/${TARGET_NAME}/GraphQL/Open"
$APOLLO_FRAMEWORK_PATH/check-and-run-apollo-codegen.sh generate $(find 
. -name '*.graphql') --schema schema.json --passthrough-custom-scalars 
--output APIOpen.swift
Run Code Online (Sandbox Code Playgroud)

现在,当代码与此运行脚本一起重新编译时,JSON 标量将变为有效。

这花了我很多时间才弄明白。希望它可以帮助某人并节省他们的时间。谢谢

  • 需要明确的是,在 iOS 版 Apollo SDK 的最新版本中,此标志实际上是 --passthroughCustomScalars。因此,您的构建脚本将如下所示: cd "${SRCROOT}/${TARGET_NAME}" $APOLLO_FRAMEWORK_PATH/check-and-run-apollo-cli.sh codegen:generate --queries="$(find . -name '*.graphql')" --passthroughCustomScalars --schema=schema.json API.swift (2认同)