graphql - GraphQL 中的标量类型是什么

标签 graphql

从他们的文档中,它说:

The leaf values of any request and input values to arguments are Scalars (or Enums) and are defined with a name and a series of serialization functions used to ensure validity

但我无法理解该定义。从对我的 previous question 的回答,我认为标量与枚举有关。有人可以用更简单的术语分解 GraphQL 标量类型的作用以及何时使用标量类型而不是枚举类型吗?

最佳答案

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

  • bool 值,真或假
  • Int,一个带符号的 32 位非小数值
  • Float,带符号的 double 小数值
  • String,一个 UTF-8 字符序列
  • ID,唯一标识符

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

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 我们想要查询哪个对象类型的字段。此选择 字段称为选择集 并用大括号括起来。在我们的示例中,namecrew 字段的选择集,crewactorsmovies 字段,甚至 movies 字段都是查询根类型的选择集的一部分。

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

更多信息可以查看官方spec .

关于graphql - GraphQL 中的标量类型是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57252685/

相关文章:

javascript - 如何在 gatsby 的 graphql 查询中使用正则表达式

reactjs - Apollo 错误处理 - 为什么 React 应用程序崩溃?

graphql - 错误: Response not successful: Received status code 400"Graphql

github - 如何使用 github graphql v4 api 查询我组织中的所有存储库?

webpack - 无法创建中继容器; graphql.js 文件似乎有 webpack 工件?

javascript - Gatsby `createPage` 正在生成具有相同数据的页面

amazon-web-services - 如何在 Appsync 中使用两个 API Key 分别授权两个 graphql 字段?

caching - 使用 Apollo 缓存具有多个 id 的 GraphQL 查询

javascript - GraphQL:不可为空的数组/列表

amazon-dynamodb - 返回也具有字段解析器的 Appsync GraphQL 类型