GraphQL |询问
我们将使用 GraphQL API 进行演示。 GraphQL 是一种用于 API 的开源数据查询和操作语言,也是一种使用现有数据完成查询的运行时。它既不是架构模式也不是 Web 服务。 GraphQL 于 2012 年由 Facebook 内部开发,然后于 2015 年公开发布。
术语:让我们从定义基本术语开始。作为参考,请考虑以下示例操作。
GraphQL 操作:作为基本定义,访问服务器的任何内容都称为“查询”。但形式上, Operations有三种类型, Query只是其中一种,另外两种是Mutations , Subscriptions 。一个字符串是用 GraphQL 语言编写的,它定义了一个或多个操作和片段。我们将在本文中使用 Pokemon 模式的现成示例,您也可以创建自己的模式。
GraphQL 查询: GraphQL 查询用于读取或获取值。它被交给 GraphQL 服务器执行并返回结果。
- 字段:将作为查询响应的一部分返回的数据单元称为字段,即使它们是嵌套的。查询结构和该查询结构的结果将与您在下图中看到的相同。
询问:{ pokemon(name:"pikachu") { name id types } }
输出:
- 参数:参数有助于以特定方式解决服务器端的查询。它是与字段一起提供的键:值对。它可以是字面量或变量,在我们已经通过提供特定名称在 pokemon 上使用参数的字段示例中。
询问:{ pokemon(id:"UG9rZW1vbjowMDE") { name types } }
输出:
- 别名:如果要对同一字段进行两个单独的查询,我们可以使用“别名”来区分这两个查询。这些别名像前缀一样添加到查询中。例如,如果我们想要检索两个 pokemon 并将它们命名为'firstPokemon'和'secondPPokemon' 。
询问:
query retrievePokemon{ firstPokemon: pokemon(name:"Pikachu") { id types } secondPokemon: pokemon(name:"Charizard") { id types } }
输出:
- 片段: GraphQL 提供了创建查询字段的子类型的能力,可以使用附加到它的标识符来一次又一次地使用。它被称为片段,并以...fragmentName的形式提供。获取多个对象,每个对象可能具有不同的字段
句法:fragment basicInfoOfPokemon on Pokemon { name id } query retrievePokemon { firstPokemon: pokemon(name: "pikachu") { ...basicInfoOfPokemon types weight{ minimum maximum } classification } }
输出:
- 操作名称:到目前为止我们使用的是简写语法,我们也可以省略查询关键字和名称。在此示例中,我们添加了查询关键字作为操作类型,并添加了Electrictype作为操作名称。
句法:query Electrictype { pokemon(name: "pikachu") { name weight { minimum maximum } } }
输出:
- 指令: “指令”影响返回的结果。常见的是“跳过”和“包含”与“如果”相结合。
@skip:如果您想在特定的“if”条件下“跳过”特定字段,可以使用。
句法:fieldName @skip (if: booleanCondition) { name } # The @skip acts like a default inclusion of # The field, unless the 'if' is valid.
输出:
@include如果您想在特定的“if”条件下“包含”特定字段,您可以使用。
句法:fieldName @include (if: booleanCondition) { name } # The @include acts like a default exclusion of # The field, unless the 'if' is valid.
输出: