GraphQL中的标量类型是什么

时间:2019-07-29 11:16:19

标签: graphql

从他们的文档中说:

  

任何请求的叶值和参数的输入值均为标量(或枚举),并使用名称和一系列用于确保有效性的序列化函数进行定义

但是我无法理解这个定义。从我的previous question的答案来看,我认为标量与枚举有关。有人可以用简单的术语来分解GraphQL标量类型做什么以及何时使用标量类型而不是枚举类型吗?

1 个答案:

答案 0 :(得分:2)

标量相当于编程语言中的primitive data types。在GraphQL中,有五种内置标量类型:

  • 布尔值,是或否
  • Int ,一个带符号的32位数字非分数值
  • 浮点数,一个带符号的双精度分数值
  • 字符串,一个UTF-8字符序列
  • ID ,一个唯一的标识符

标量仅表示单个值,并且是架构的基本构建块。这与代表值集合的对象类型相比。对象类型具有字段,并且每个字段都具有类型,该类型可以是标量或对象类型本身。如果字段的类型是对象,则该对象将具有也是标量或其他对象的字段,依此类推。这样,我们在模式和针对它的查询中都会得到一个 like 结构。

query {       # <- The "root" of the tree
  movies {
    actors {
      name    # <- A "leaf" on the tree
    }
    crew {
      name    # <- Another "leaf"
    }
  }  
}

枚举类似于标量,因为枚举表示单个具体值。但是,每个枚举类型都在架构中明确定义(没有“内置”枚举),并且其定义必须包括该枚举类型可以是的一组值。例如,我们可以创建一个枚举,例如:

enum Animal {
  Cat
  Dog
  Bird
}

返回Animal的字段仍将具有单个值,例如标量,但是该值将是“ Cat”,“ Dog”或“ Bird”-不允许其他值。< / p>

叶子类型是一个包含 标量和枚举的术语。叶子类型代表我们树状查询及其响应中的叶子或终点。

当字段返回对象类型(如上例中的moviesactorscrew)时,我们必须告诉GraphQL我们要查询的对象类型的字段。字段的选择被称为选择集,并用大括号括起来。在我们的示例中,namecrew字段的选择集,crewactorsmovies字段的选择集,甚至是{ {1}}字段是查询根类型选择集的一部分。

这里要注意的重要一点是叶子类型没有字段,因此任何返回叶子类型的字段都不会具有选择集

有关更多信息,您可以查看官方spec

相关问题