将GraphQL架构从非JS服务器暴露给JS客户端

时间:2016-02-22 23:31:27

标签: javascript java graphql graphql-js

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

现在,我理解GraphiQL不知怎的就是这样,但我猜它是因为它的后端也是用JavaScript编写的,所以客户端和服务器都可以使用它。我的模式是用Java定义的,但可能有一种方法可以自动生成客户端可以使用的JavaScript表示。

这样的事情是否已经存在?

1 个答案:

答案 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服务器都应该能够开箱即用:您不需要显式添加任何功能。