将 GraphQL 模式从非 JS 服务器公开给 JS 客户端
Posted
技术标签:
【中文标题】将 GraphQL 模式从非 JS 服务器公开给 JS 客户端【英文标题】:Expose GraphQL schema from non-JS server to a JS client 【发布时间】:2016-06-04 14:35:31 【问题描述】:我有一个用 Java 实现的 GraphQL 服务器和一个查询它的 javascript 客户端。我不喜欢的是客户端必须知道架构,而不能从服务器获取它,而是动态地构建针对它的查询。
现在,我了解 GraphiQL 以某种方式做到了这一点,但我猜这是因为它的后端也是用 JavaScript 编写的,因此客户端和服务器都可以使用它。我的模式是用 Java 定义的,但可能有一种方法可以自动生成客户端可以使用的 JavaScript 表示。
这样的东西已经存在了吗?
【问题讨论】:
【参考方案1】:现在,我知道 GraphiQL 以某种方式做到了这一点,但我猜这是因为它的后端也是用 JavaScript 编写的,因此客户端和服务器都可以使用它。
实际上,(幸运的是)情况并非如此。它是用 Javascript 编写的,但不需要实现此行为。
我有一些好消息要告诉你...
自省!
关于 GraphQL 的一个很棒的事情是,事实上,客户端不需要知道任何关于模式的信息,因为它可以使用 introspection 来查询服务器。事实上,如果您没有明确提供模式来自动填充它,GraphiQL 会自动使用它。
来自GraphiQL README 的道具部分:
schema:一个 GraphQLSchema 实例,如果不使用,则为 null。如果提供了 undefined,GraphiQL 将使用 fetcher 发送自省查询以生成架构。
官方GraphQL Introspection docs将为您提供更多信息和示例查询。他们查询 Star Wars 示例架构的示例:
__schema
types
name
这将返回所有类型的名称。自省是 GraphQL 规范的一部分,因此每个 GraphQL 服务器都应该能够开箱即用:您无需显式添加任何功能。
【讨论】:
以上是关于将 GraphQL 模式从非 JS 服务器公开给 JS 客户端的主要内容,如果未能解决你的问题,请参考以下文章
从非 Android 设备查找和 Android NSD-Service
将 GraphQL Schema 公开为 REST api 的方法都有哪些?