GraphQL 中的标量类型是什么

Rah*_*tel 1 graphql

从他们的文档中,它说:

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

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

Dan*_*den 5

标量相当于编程语言中的原始数据类型。在 GraphQL 中,有五种内置的标量类型:

  • 布尔值,真或假
  • Int,一个有符号的 32 位非小数数值
  • Float,一个带符号的双精度小数值
  • String , UTF?8 字符序列
  • ID,唯一标识符

标量仅表示单个值并且是架构的基本构建块。这与表示值集合的对象类型相比。一个对象类型有字段,每个字段都有一个类型,可以是标量或对象类型本身。如果字段的类型是对象,则该对象将具有也是标量或其他对象的字段,依此类推。通过这种方式,我们最终在我们的模式和对其进行的查询中都得到了一个树状结构。

query {       # <- The "root" of the tree
  movies {
    actors {
      name    # <- A "leaf" on the tree
    }
    crew {
      name    # <- Another "leaf"
    }
  }  
}
Run Code Online (Sandbox Code Playgroud)

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

enum Animal {
  Cat
  Dog
  Bird
}
Run Code Online (Sandbox Code Playgroud)

返回 an 的字段Animal仍将具有单个值,如标量,但该值将是“Cat”、“Dog”或“Bird”——不允许使用其他值。

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

当一个字段返回一个对象类型(如movies, actors, 或crew在上面的例子中)时,我们必须告诉 GraphQL 我们要查询对象类型的哪个字段。这种选择的字段称为选择集,并用大括号括起来。在我们的例子中,name是在选择用于设置crew字段,crew并且actors是用于选择集movies字段,甚至movies字段是用于查询根类型选择集的一部分。

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

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