【问题标题】:Is it possible to change a GraphQL schema at runtime and write resolvers that handle this dynamic schema? (in Java)是否可以在运行时更改 GraphQL 架构并编写处理此动态架构的解析器? (在 Java 中)
【发布时间】:2020-09-10 16:57:53
【问题描述】:

我正在使用 GraphQL(在 Java 中),我想找到一种方法来执行以下操作: 我需要能够在运行时不断调整 GraphQL 架构而无需重新启动。特别是我需要能够向 GraphQL 类型添加新字段。此外,我需要能够编写能够处理这种动态模式的解析器。

我还没有示例代码,所以只考虑最简单的示例(一种 GraphQL 类型,其中包含多个字段,这些字段都可以是不同的类型)。

我的问题是我是 GraphQL 的新手,而且我没有太多的经验。当然,我在互联网上寻找了解决方案,但我还没有找到(或者只是因为我缺乏 GraphQL 经验而没有注意到我找到了它)。 我发现的唯一有趣的发现是:exposing dynamic schemas with graphql。但我不明白这个解决方案是如何工作的,因为 1)我不知道如何在运行时重新加载架构,以及 2)我不知道如何编写解析器以便它们可以处理该动态架构。

那么任何人都可以帮助我解决我的问题和/或回答我关于我找到的链接的问题吗?

我非常感谢每一个帮助,无论它有多么广泛。就像我之前说过的,我在 GraphQL 方面还是个新手。因此,我也非常感谢提供示例链接(如果可能),以便我更好地理解。

非常感谢您。

【问题讨论】:

  • 虽然在某些用例中动态更改架构可能是有效的(例如构建无头 CMS),但这对我来说听起来像是一个危险信号。通常,GraphQL 模式不应更改。 GraphQL 模式是软件之间的契约,它必须随着时间的推移保持不变。因此,大多数服务器库不是为在运行时更改架构而设计的,尤其是那些用于静态类型的编译语言的库。一个人可能会在 Node.js 中一起破解一些东西......

标签: graphql graphql-java


【解决方案1】:

首先,切勿尝试这样做或仅在某些非常严格的情况下使用。原因如下:

  • 架构就像front-end & backend & 之间的契约,一旦发生变化,它会很快导致两者之间的不稳定
  • 如果您尝试更改 GraphQL 的架构,它可能无法正确连接到您的解析器以及连续连接到您的数据库。
  • 每当架构发生变化时,GraphQL 服务器(通常是服务器处理程序)都需要重新启动(重新编译),这需要时间,因此会导致响应时间过长。

无论您使用哪种语言,都应该始终将其视为危险信号。在我看来,这将是一个非常糟糕的做法。

【讨论】:

  • 这是一个观点,而不是回答这个问题。在许多用例中,在运行时更改架构是一种明智的方法,特别是考虑到 GraphQL 的内置自省系统(旨在让客户发现架构),因此最好将这些意见保留到不同的论坛
猜你喜欢
  • 2013-02-20
  • 2017-01-22
  • 2018-12-17
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多