【问题标题】:What are scalar types in GraphQL什么是 GraphQL 中的标量类型
【发布时间】:2019-12-06 17:25:01
【问题描述】:

从他们的文档中,它说:

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

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

【问题讨论】:

    标签: graphql


    【解决方案1】:

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

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

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

    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”——不允许使用其他值。

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

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

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

    更多信息可以查看官方spec

    【讨论】:

      猜你喜欢
      • 2020-03-13
      • 2018-09-28
      • 2019-04-12
      • 2021-05-14
      • 2019-10-12
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      相关资源
      最近更新 更多