gpt4 book ai didi

GraphQL 请求不存在的字段没有错误

转载 作者:行者123 更新时间:2023-12-05 07:17:18 24 4
gpt4 key购买 nike

我正在尝试处理与我的 GraphQL API 的向后兼容性。

我们的本地服务器会根据连接到互联网的时间定期更新。我们有一个与本地服务器对话的移动应用程序。

问题

我们遇到了移动应用程序是最新的而本地服务器不是的问题。当模式发生变化时,会导致问题。

例子

产品版本 1

type Product {
name: String
}

产品版本 2

type Product {
name: String
account: String
}

新版手机应用要求:

product(id: "12345") {
name
account
}

因为 account 在版本 1 中无效,我得到错误:

"Cannot query field \"account\" on type \"Product\"."

有谁知道我怎样才能避免这个问题,这样我就不会收到这个特定的错误。我完全同意 account 返回 Null 或者只是更新 Schema 的一些其他攻击计划。但是完全炸毁没有任何反应可不好

最佳答案

您的问题没有具体说明您在后端实际使用的是什么。但是应该可以自定义 GraphQL 服务在基于 JavaScript 引用实现的任何实现中使用的验证规则。以下是您在 GraphQL.js 中的做法:

const { execute, parse, specifiedRules, validate } = require('graphql')

const validationRules = specifiedRules.filter(rule => rule.name !== 'FieldsOnCorrectType')
const document = parse(someQuery)
const errors = validate(schema, document, validationRules)
const data = await execute({ schema, document })

通过省略 FieldsOnCorrectType 规则,您将不会收到任何错误,并且无法识别的字段将简单地从响应中删除。

但你真的不应该那样做。

修改验证规则将导致对您的服务器进行破坏规范的更改,这可能会导致客户端库和您使用的其他工具出现问题。

这个问题实际上归结为您的部署过程。在将新版本的服务器 API 部署到服务器之前,您不应推送依赖于较新版本服务器 API 的客户端的新版本。时期。无论您是否使用 GraphQL、REST、SOAP 等,这都适用。

关于GraphQL 请求不存在的字段没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58859146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com