Module 02 · Web API Essentials: REST API and GraphQL
Optional: Basics of GraphQL(可选)GraphQL 基础知识
什么是 GraphQL?
GraphQL 是一种用于您的 API 的查询语言(Query Language)。
- 核心目标: 它提供了一种标准方式,允许客户端仅请求他们从 API 所需的数据。
- 语言无关性: 它可以使用任何编程语言进行开发,因为它与语言无关(language agnostic)。
GraphQL 的核心优势
GraphQL 使您能够精确地从 API 检索所需的内容:
- 不多不少: 您不会收到您没有请求的数据。
- 精确数据: 您可以从不同资源中,精确地收到您所需要的数据。
- 单个端点: 与 RESTful API 不同,GraphQL 只需要一个端点即可检索您需要的所有内容。
- 示例: 如果您只需要产品的名称,那么您收到的就只有名称。
GraphQL API 的关键特性

| 特性 | RESTful API | GraphQL API |
|---|---|---|
| 架构 | API 即资源,提供端点以使用 HTTP 方法执行特定操作。 | 模式(Schema)中定义的类型即为节点(Nodes)。 |
| 请求端点 | 通常需要多个调用(multiple calls)来获取不同资源的数据。 | 通常只需要一个端点即可获取所需的所有数据。 |
| 数据接收 | 接收服务器发送的所有数据(可能包含冗余)。 | 只请求和接收您所需要的数据。 |
| API 扩展 | 扩展可能需要创建新的 API 版本。 | 扩展不需要新的版本;您可以添加新字段,而不会破坏现有客户端(因为它们只请求了所需的内容)。 |
查询与修改数据
GraphQL 通过两种主要操作类型来处理数据:
- 查询(Query):
- 用于查询您的数据。
- 类似于 RESTful API 中的 GET 请求。
- 核心:对对象上的特定字段发出请求。

- 变更(Mutation):
- 用于操作和修改您的数据。
- Mutation 类型中的每个字段都可以被视为 RESTful API 中的 POST、PUT 或 DELETE 请求。

实际应用示例:Netflix
Netflix 以其松耦合和高度可伸缩的微服务架构而闻名。
- 挑战: 最初,实体之间的关系分散在各种微服务中。

- 解决方案: Netflix 团队开始构建一个精选的 Graph API,称为 "Studio API"。
- 目标是提供统一的抽象,覆盖数据和关系。
- 在这种新设计中,Studio API 负责模式(schema)和解析查询(resolving queries)。
- 进一步发展: Netflix 工程团队采用了联合架构(federated architecture),其中每个团队都拥有其各自领域的所有权。

总结
- GraphQL 是一种语言无关的 API 查询语言。
- 它为您提供精确的数据,不多不少。
- 它只需要一个端点来处理复杂的数据请求。