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