繁体   English   中英

HotChocolate (GraphQL) 忽略查询中的架构错误

[英]HotChocolate (GraphQL) ignore schema errors on query

我希望能够“抑制”默认的 HotChocolate(服务器)行为并忽略查询时的架构错误。

让我试着举个例子。 假设我们确实有以下模式:

type Query {
    myTypes: [MyType]
}

type MyType{
    id: ID!
    name: String
}

如果我尝试进行如下查询:

{
    myTypes {
        id,
        name
    }
}

一切正常。 但是,如果我做类似的事情:

{
    myTypes {
        id,
        name,
        notKnownProperty
    }
}

查询失败。 这通常是期望的行为(严格模式的全部好处),但在我的特定情况下不是。

用例是当我们有 2 个或更多服务时,它们公开一个相同的模式(具有不同的数据)并且其中一些服务以不同的速度发展。 不幸的是,我们无法控制这些服务的版本,因为其中一些是内部部署的。 我们最终会遇到一些服务比其他服务具有更新版本(具有更多相同类型的字段)的情况。 这限制了我们只能使用最旧的可用客户端。 我们想做相反的事情 - 使用最新的客户端并处理其中的缺失字段(例如使用默认值)。

一种可能的解决方案是实施某种版本控制。 在路径(又名 /graphql/v1)或 object 类型本身(又名 MyType1、MyType2 等)中。 但我个人不喜欢这些方法。

任何想法和意见表示赞赏

提前致谢

一旦您想使用新客户端,它们应该向后兼容,即能够正确使用旧版本的 API。 为此,将不存在的值视为具有默认(空)值显然是不够的。 当您的最终用户没有电话号码和他们有但旧的 API 版本不提供电话号码时,这是一个很大的区别。 所以,你需要有一个更强大的策略来实现向后兼容。 如果您不想按原样使用版本控制,关于 GraphQL(不仅仅是热巧克力),至少还有两种其他可用策略:

  1. 您的客户端应用程序最初可以分析该方案以检查缺少哪些属性,并决定如何构建对具有该知识的 API 的请求。
  2. 您的客户端应用程序可以即时更改其策略。 即不查询方案,而是处理查询的错误。 由于 Graph QL 中的错误非常结构化,客户端可以很容易地了解哪些属性被遗漏并相应地调整未来的请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM