发布于 2026-01-06 1 阅读
0

GraphQL 术语速查表

GraphQL 术语速查表

GraphQL 是一种 API 查询语言。它最初由 Facebook 开发,现在隶属于 Linux 基金会。Facebook(这还用说吗……😉)、GitHub 和 Pinterest 等巨头都在使用它。GraphQL 的社区发展迅速,它可能是目前最流行的 REST 替代方案。

实际上,GraphQL 只是一个规范,它针对不同的语言有很多实现,例如 JavaScript、Go、Elixir、Ruby、Java、Python 等。

在本文中,我想解释一下GraphQL的术语。和其他规范一样,GraphQL也需要创造自己的语言和术语,所以我就来为大家解惑。

我不会涵盖所有术语,只会介绍最常用的那些。这些术语在你构建自己的 GraphQL 服务器或客户端时很可能会遇到。

  • 类型——GraphQL 是一种基于类型的查询语言。因此,类型是构建领域模型的基本模块。就像其他任何类型化语言(例如 Java、C# 和 TypeScript)一样,每种类型都包含一个或多个字段。
  • 字段——字段定义了给定类型所包含的数据。其他语言可能将其称为属性或getter。唯一的区别在于,字段也可以像函数一样接收参数。这使我们能够创建复杂的逻辑来解析字段。
  • 查询 (Query) - 一种预置的数据查询类型。查询类型中的每个字段都可以被视为一个独立的查询。您可以将其想象成 REST API 中的 GET 请求。查询字段仅返回数据,不会对其进行任何更改。
  • Mutation 类型是一种预置的数据操作类型。Mutation 类型中的每个字段都可以视为 REST API 中的 POST/PUT/DELETE/PATCH 请求。Mutation 字段可以返回数据,但其主要用途是操作数据。
  • 订阅- 一种预置类型,用于描述客户端可以订阅的实时事件。每个字段都是一个事件,客户端可以请求接收该事件的实时更新。可以把它想象成一个聊天室,加入后即可收到所有新消息。
  • 片段(Fragment) ——一个可重用的单元,用于将一组字段组合在一起,通常用于查询、变更或订阅中。您可以将其视为 SQL 数据库中的视图。如果您发现自己在不同的查询中反复查询相同的字段,则可以创建一个片段来封装它们。片段还可以接收参数。
  • 指令——与参数类似,指令可以用来改变字段的实现方式。指令可以附加到字段或片段包含上。服务器必须实现指令及其具体功能。其核心理念是创建可重用的逻辑,应用于每个字段的解析器。例如,身份验证指令可以在请求未通过身份验证时丢弃特定字段。规范包含两个指令:`include` 和 `skip`,任何 GraphQL 服务器都必须支持这两个指令。
  • 模式(Schema) ——定义 API 的文档。它是 GraphQL 服务器的核心。它定义了类型、查询、变更、订阅、指令以及所有必需的内容。模式仅包含定义,不包含实现。模式可以用代码编写,也可以用 GraphQL SDL(模式定义语言)编写。
  • SDL(模式定义语言)——我们用来定义 GraphQL 模式的语言(见上文)。
  • 代码优先——如上所述,您可以以编程方式编写 GraphQL schema,也可以使用 SDL。代码优先指的是开发者使用自己选择的编程语言(例如 TypeScript)创建 schema,然后由脚本自动生成 GraphQL schema。
  • 模式优先——与代码优先完全相反。在模式优先中,开发者先用 SDL 编写模式,然后再用自己选择的语言编写类型和解析器。他们还可以使用现有的工具从模式自动生成类型和解析器,而无需手动操作。
  • 解析器(Resolver) ——服务器端的一个函数,用于处理对特定字段的请求。通常,首先调用的是查询/变更解析器,然后依次调用响应中返回的每个字段的解析器。
  • 抽象语法树 ( AST )——每个 GraphQL 请求都可以被转换成一个庞大的嵌套树对象。AST 是基于文本的查询的二进制表示。服务器一旦收到查询,就会将其编译成 AST,供解析器使用。解析器使用 AST 来确定要返回的类型、参数、指令以及几乎所有其他内容。AST 是编程中的一个通用概念,但在 GraphQL 的高级主题中经常用到。
  • 上下文(Context) ——传递给同一请求的所有解析器的值。通常,上下文包含已认证用户、数据库连接和其他共享数据等信息。
  • 模式联合(Apollo Federation)——如今,微项目、微前端和微服务层出不穷。模式联合是指在关注点分离的前提下,合并多个 GraphQL 模式的过程。每个模式都可以引用其他服务模式的类型,而无需关心具体的实现细节。这些引用将在运行时由网关解析。
  • Gateway是一个智能 GraphQL 代理。它利用模式联合来公开一个由至少一个联合模式组成的单一模式。收到请求后,Gateway 知道如何将请求路由到各个服务,从而完整地满足请求。

好了,我们成功了!现在你应该能理解任何关于 GraphQL 的讨论,或者开始创建你的第一个 GraphQL 服务了。你已经掌握了入门所需的基本术语。


daily.dev是获取最新编程资讯的最便捷方式。它汇集了由超过 6 万名开发者组成的社区评选出的文章,方便您随时掌握最新动态。只需一个扩展程序,即可获取来自顶级科技媒体的各类精彩内容。
每日邮报

文章来源:https://dev.to/dailydotdev/graphql-terminology-cheatsheet-4lem