【问题标题】:Filter or distinguish built-in and custom graphql types过滤或区分内置和自定义的 graphql 类型
【发布时间】:2019-10-01 11:10:54
【问题描述】:

在针对 graphql api 运行 introspectionQuery 时,我试图找到一种方法来区分(并过滤掉)内置类型和我的自定义类型。输出中似乎没有任何可靠的东西可以确定哪些类型是内置的(除了“系统”类型前面的 __)。

在这一点上,我什至找不到一个正式的列表,所以我最好的选择似乎是检查 introspectionQuery 输出并制作一个列表以供将来使用,希望没有任何变化。

真的没有系统的方法来区分这两者吗?

【问题讨论】:

  • 你有没有找到一个查询来做这个?
  • @pkatsourakis 不幸的是没有。但正如下面的答案所述,它们非常简单,不太可能改变:)

标签: graphql graphql-js introspection


【解决方案1】:

虽然规范确实指定了每个实现都应包含的标量类型,并指定了如何序列化和解析这些标量,但它并没有真正区分这些内置标量和任何其他标量GraphQL 服务可能会暴露。在功能上,“内置”类型和“自定义”类型没有区别。

有五个内置标量outlined by the spec。这些在未来不太可能发生变化。

  • 内部
  • 浮动
  • 字符串
  • 布尔值
  • 身份证

还有几个“元”类型明确用于自省。这些是here 的概述。

  • __架构
  • __类型
  • __字段
  • __InputValue
  • __EnumValue
  • __TypeKind
  • __指令
  • __DirectiveLocation

以两个下划线 (__) 开头的名称是保留名称,因此以这种方式开头的任何类型都可以安全地归类为“内置”。

从你的问题不清楚你试图区分“内置”和“自定义”类型的目的是什么,但我想对于大多数目的,我们会认为上述是“内置”类型和任何其他“自定义”。

【讨论】:

  • 我手头的用例是一个可重用的测试设置,我在其中迭代自省查询返回的类型(由graphqlnpm 模块提供)并检查诸如描述之类的东西。它在为 API 生成文档或构建内省数据浏览器等场景中也很有用。感谢您的链接,我将按照规范进行:)
猜你喜欢
  • 2020-11-17
  • 2016-11-11
  • 2020-06-07
  • 2019-09-23
  • 2014-09-30
  • 2014-11-19
  • 2016-10-21
  • 2014-10-22
  • 1970-01-01
相关资源
最近更新 更多