将 GraphQL 模式从非 JS 服务器暴露给 JS 客户端

kaq*_*qao 3 javascript java graphql graphql-js

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

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

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

Eri*_*per 5

现在,我明白 GraphiQL 以某种方式做到了这一点,但我猜这是因为它的后端也是用 JavaScript 编写的,所以客户端和服务器都可以使用它。

实际上,(幸运的是)事实并非如此。它是用 Javascript 编写的,但不一定要实现这种行为。

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

内省!

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

GraphiQL README的道具部分:

schema:一个 GraphQLSchema 实例,如果不使用,则为 null。如果提供了 undefined,GraphiQL 将使用 fetcher 发送一个自省查询来生成模式。

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

{
  __schema {
    types {
      name
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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