我有一个用 Java 实现的 GraphQL 服务器和一个查询它的 JavaScript 客户端。我不喜欢的是客户端必须只知道架构并且不能从服务器获取它,而是动态地构建针对它的查询。
现在,我了解 GraphiQL 以某种方式做到了这一点,但我猜这是因为它的后端也是用 JavaScript 编写的,因此客户端和服务器都可以使用它。我的模式是用 Java 定义的,但可能有一种方法可以自动生成客户端可以使用的 JavaScript 表示。
这样的事情是否已经存在?
我有一个用 Java 实现的 GraphQL 服务器和一个查询它的 JavaScript 客户端。我不喜欢的是客户端必须只知道架构并且不能从服务器获取它,而是动态地构建针对它的查询。
现在,我了解 GraphiQL 以某种方式做到了这一点,但我猜这是因为它的后端也是用 JavaScript 编写的,因此客户端和服务器都可以使用它。我的模式是用 Java 定义的,但可能有一种方法可以自动生成客户端可以使用的 JavaScript 表示。
这样的事情是否已经存在?
现在,我了解 GraphiQL 以某种方式做到了这一点,但我猜这是因为它的后端也是用 JavaScript 编写的,因此客户端和服务器都可以使用它。
实际上,(幸运的是)情况并非如此。它是用 Javascript 编写的,但不需要实现此行为。
我有一些好消息要告诉你...
GraphQL 最棒的事情之一是,事实上,客户端不需要知道任何关于模式的信息,因为它可以使用自省来查询服务器。事实上,如果您没有明确提供模式来自动填充它,GraphiQL 将自动使用它。
从GraphiQL README的 Props 部分:
schema:一个 GraphQLSchema 实例,如果不使用,则为 null。如果提供了 undefined,GraphiQL 将使用 fetcher 发送自省查询以生成模式。
官方的GraphQL Introspection 文档将为您提供更多信息和示例查询。他们查询他们的星球大战示例模式的示例:
{
__schema {
types {
name
}
}
}
这将返回所有类型的名称。自省是 GraphQL 规范的一部分,因此每个 GraphQL 服务器都应该能够开箱即用:您不需要显式添加任何功能。