将 GraphQL 模式从非 JS 服务器公开到 JS 客户端

Expose GraphQL schema from non-JS server to a JS client

我有一个在 Java 中实现的 GraphQL 服务器和一个查询它的 JavaScript 客户端。我不喜欢的是,客户端只需要 知道 模式,而不能从服务器获取它,而是动态构建针对它的查询。

现在,我知道 GraphiQL 以某种方式做到了这一点,但我猜这是因为它的后端也是用 JavaScript 编写的,因此客户端和服务器都可以使用它。我的架构在 Java 中定义,但可能有一种方法可以自动生成客户端可以使用的 JavaScript 表示。

这样的东西已经存在了吗?

Now, I understand GraphiQL somehow does just that, but I'm guessing it's because its backend is also written in JavaScript so both the client and server can use it.

其实(幸好)不是这样的。它写在Javascript中,但不需要实现此行为。

我有一些好消息要告诉你...

自省!

GraphQL 的一个很棒的事情是,事实上,客户端不需要知道关于模式的任何事情,因为它可以使用 introspection[=30 查询服务器来获取它=].事实上,如果您没有明确提供模式来自动填充它,GraphiQL 将自动使用它。

来自 GraphiQL README 的道具部分:

schema: a GraphQLSchema instance or null if one is not to be used. If undefined is provided, GraphiQL will send an introspection query using the fetcher to produce a schema.

官方GraphQL Introspection docs将为您提供更多信息和示例查询。他们查询星球大战示例架构的示例:

{
  __schema {
    types {
      name
    }
  }
}

此returns所有类型的名称。自省是 GraphQL 规范的一部分,因此每个 GraphQL 服务器都应该能够开箱即用:您不需要显式添加任何功能。