学习简介

GraphQL 简介

了解 GraphQL,它的工作原理以及如何使用它

GraphQL 既是一种用于 API 的查询语言,也是一个服务器端运行时,用于通过你为数据定义的类型系统来执行查询。GraphQL 规范于 2015 年开源,此后已在多种编程语言中实现。GraphQL 不绑定到任何特定的数据库或存储引擎——它由你现有的代码和数据提供支持。

如果你已经熟悉 GraphQL 并想阅读有关如何构建 GraphQL 服务的文档,那么有很多库可以帮助你在许多不同语言中实现 GraphQL。还有许多可用的库允许客户端应用程序查询现有的 GraphQL API

使用类型系统描述你的 API

GraphQL 服务是通过定义类型及其字段,然后为每个字段编写一个函数来提供所需数据来创建的。例如,一个告知你已登录用户名称的 GraphQL 服务可能如下所示:

type Query {
  me: User
}
 
type User {
  name: String
}

以及针对每个类型的每个字段的函数:

// Resolver for the `me` field on the `Query` type
function resolveQueryMe(_parent, _args, context, _info) {
  return context.request.auth.user;
}
 
// Resolver for the `name` field on the `User` type
function resolveUserName(user, _args, context, _info) {
  return context.db.getUserFullName(user.id);
}

在上面的示例中,为 Query 类型上的 me 字段提供数据的函数使用了发起请求的已认证用户信息,而 User 类型上的 name 字段则通过使用该用户的 ID 从数据库中获取其全名来填充。

精确查询你所需要的数据

在 GraphQL 服务运行后(通常位于 Web 服务的某个 URL 上),它可以接收客户端发来的 GraphQL 查询进行验证和执行。服务首先检查查询,确保它仅引用了为该 API 定义的类型和字段,然后运行提供的函数以生成结果。

例如,查询:

{
  me {
    name
  }
}

可能会生成以下 JSON 结果:

{
  "data": {
    "me": {
      "name": "Luke Skywalker"
    }
  }
}

即使是一个简单的查询,我们也能看到让 GraphQL 如此强大的核心特性。客户端可以向 API 发起与所需数据结构一致的查询,然后通过单次请求获得预期形状的数据——且无需关心这些数据是由哪些底层数据源提供的。

无需版本控制即可演进 API

客户端的需求随时间而变化,GraphQL 允许你的 API 响应这些需求而演进,且无需管理不同 API 版本的开销。例如,如果新功能要求提供更具体的名称值,则可以按如下方式更新 User 类型:

type User {
  fullName: String
  nickname: String
  name: String @deprecated(reason: "Use `fullName`.")
}

客户端工具将鼓励开发人员使用新字段,并移除对已弃用 name 字段的使用。一旦确定该字段不再被使用,就可以将其删除;在此期间,GraphQL 将继续按预期提供其数据。

立即尝试!

学习 GraphQL 最好的方法就是开始编写查询。本指南中使用的查询编辑器是交互式的,因此请尝试在 hero 对象中添加 idappearsIn 字段,以查看更新后的结果:

操作
响应

本指南中的示例基于 SWAPI GraphQL 架构的修改版本。由于这些查询旨在用于说明目的,由于两个架构之间的差异,它们将无法在完整版的 SWAPI GraphQL API 上运行。你可以在这里尝试完整版的 API。

后续步骤

现在你已经了解了一些关键的 GraphQL 概念,可以开始学习其类型系统的所有不同方面了。

如需深入学习体验及实用教程,请参阅现有的培训课程

下一课

Schema 和类型

了解 GraphQL 的架构语言如何使用类型来定义数据的形状。

前往下一课 教程