什么是 GraphQL?

GraphQL 是一种用于构建和查询 API 的开发工具和查询语言,旨在解决传统 REST API 中存在的一些问题,并提供更高效、灵活和精确的数据获取方式。在 GraphQL 中,客户端可以通过发送查询请求来获取特定的数据,而不是从服务器获取固定结构的整个资源。

GraphQL 的核心概念是什么

GraphQL 是一种用于 API 的查询语言,它提供了一种更高效、灵活的方式来获取和操作数据。以下是 GraphQL 的核心概念:

Schema (模式)

定义了 GraphQL API 的类型和能力。它描述了 API 中可用的查询、变更和订阅操作,以及数据类型和关系。Schema 是 GraphQL 服务的核心,它为客户端提供了一个清晰的数据视图。

Query (查询)

用于定义客户端需要从 GraphQL API 中获取的数据。查询指定了要查询的字段,并且可以通过参数进行过滤和排序。查询语言的设计使得客户端能够精确地请求所需的数据,避免了过度获取或欠获取数据的问题。

Mutation (变更)

用于修改或写入数据的操作。变更可以创建、更新或删除数据,并且可以在单个请求中执行多个变更操作。变更与查询的语法类似,但具有不同的语义。

Resolver (解析器)

负责获取数据,将查询或变更中指定的字段映射到对应的数据源。解析器是 GraphQL 服务器的核心组件,它定义了如何从数据库、Web 服务或其他数据源获取数据。

Field (字段)

指定一个数据类型中的特定属性或对象。字段可以是标量类型(如字符串、整数等)或对象类型。客户端可以选择性地请求特定字段,从而优化数据传输。

GraphQL 与传统的 REST API 有何不同

GraphQL 是一种新兴的 API 查询语言和运行时,与传统的 REST API 相比有一些显著的不同之处。以下是 GraphQL 与 REST API 的主要区别:

亚马逊云科技中国峰会

6 月 19 日 - 20 日|上海世博中心

聚焦生成式 AI 从技术爆发迈向行业深耕的跨越

GraphQL 的工作原理是什么

GraphQL 是一种用于 API 的查询语言,它提供了一种更加灵活和高效的方式来查询和修改数据。GraphQL 的工作原理可以概括为以下几个步骤:

1

定义 Schema

开发者需要首先定义 GraphQL API 的 schema,其中包括查询类型 (Query)、修改类型 (Mutation) 和数据类型等。在 schema 中,开发者需要定义所有可以被查询或修改的数据和操作。Schema 充当了 GraphQL API 的"契约",描述了客户端可以如何请求数据。

2

发送 Query 或 Mutation

客户端将需要查询或修改的数据和操作封装成 GraphQL 所定义的请求格式(Query 或 Mutation),并发送给 GraphQL 服务器。这些请求描述了客户端需要获取或修改的数据。

3

解析请求

GraphQL 服务器接收到客户端的请求后,会解析请求中包含的 Query 或 Mutation,识别出需要查询或修改的数据和操作,以及需要调用的 resolver 函数。

4

执行 resolver

resolver 是 GraphQL 的核心组件,负责提供具体的数据和功能。GraphQL 服务器会对相应的 resolver 进行调用,resolver 会连接不同的数据源(如数据库、Web 服务等),并按照 resolver 返回的数据结构来返回指定的数据。

5

返回数据

GraphQL 服务器将 resolver 返回的数据打包成 GraphQL 定义的响应格式,并发送回客户端。客户端可以根据返回的数据进行渲染和界面显示。

总的来说,GraphQL 提供了一种更加灵活和高效的数据查询方式,可以根据客户端的需求动态构建响应数据结构,减少了多次请求的需求,提高了数据获取效率。但同时也带来了一些新的挑战,如缓存控制和查询复杂性管理等。

GraphQL 的优势是什么

GraphQL 是一种声明式数据获取语言,为客户端提供了许多优势。

GraphQL 可以与哪些编程语言和框架一起使用

GraphQL 是一种开源的查询语言和运行时,旨在提供更高效、强大和灵活的 API。它可以与各种编程语言和框架无缝集成,为开发人员提供了极大的灵活性和可扩展性。以下是 GraphQL 可以与之配合使用的一些常见编程语言和框架:

JavaScript


  • Node.js: 使用 Node.js 可以轻松构建和运行 GraphQL 服务器。流行的 GraphQL 服务器库包括 Apollo Server 和 graphqlyoga。
  • React: 结合 Apollo Client 或 Relay 等库,可以在 React 应用中高效使用 GraphQL。
  • Vue.js 和 Angular 等前端框架也可以通过相应的库与 GraphQL 集成。


JavaScript

Java

  • graphqljava: 一个流行的 Java 实现库,可用于构建 GraphQL API。
  • Netflix DGS: Netflix 开源的一个基于代码优先的 GraphQL 服务器。
Java

Python

  • Graphene: 一个流行的 Python GraphQL 库,支持 Django、Flask 和 Pyramid 等框架。
  • Ariadne: 另一个 Python 库,提供了基于 schemafirst 的 GraphQL 实现。
Python

Ruby

  • graphqlruby: 一个健壮的 Ruby GraphQL 实现库。
  • graphqlclient: 用于 Ruby 客户端的 GraphQL 库。
Ruby

PHP

  • webonyx/graphqlphp: 一个功能全面的 PHP GraphQL 服务器库。
  • Lighthouse: 一个基于 Laravel 框架的 GraphQL 服务器实现。
PHP

GraphQL 的性能如何

如何设计和实现 GraphQL API

GraphQL 是一种开源的数据查询和操作语言,用于 API 和查询运行时引擎。它能够实现声明式数据获取,客户端可以精确指定从 API 需要获取的数据,而不是通过多个端点返回单独的数据。GraphQL 服务器暴露一个单一端点,并响应客户端请求的精确数据。

定义类型和解析器

GraphQL 服务是通过定义带有字段的类型,然后为每个字段提供解析数据的函数来创建。这些类型和字段构成了模式定义,而检索和映射数据的函数称为解析器。经过对模式的验证,GraphQL 查询由服务器执行,服务器返回一个与原始查询形状相同的结果,通常为 JSON 格式。

定义类型和解析器

支持读写和实时更新

GraphQL 支持读取、写入(变更)和订阅数据更改(实时更新)。它还支持从服务器发送到客户端的实时更新,这个操作称为订阅。客户端定义了每次更新时所需数据的形状。当通过 GraphQL 服务器进行更新关联字段的变更时,数据会以订阅设置的格式发送给所有已订阅的客户端。

支持读写和实时更新

测试和部署

GraphQL API 可以手动或使用自动化工具发出 GraphQL 请求并验证结果的正确性进行测试。由于类型化模式和内省功能,也可以进行自动测试生成。GraphQL API 可以部署在完全托管的服务如 Amazon AppSync 上,该服务可以轻松开发 GraphQL API,并安全连接到数据源如 DynamoDB、Lambda 等。AppSync 还可以通过 WebSockets 向数百万客户端推送实时数据更新,并在设备离线时提供本地数据访问。

测试和部署

欢迎加入亚马逊云科技培训中心

从 0 到 1 轻松上手云服务,获取更多官方开发资源及培训教程

快速上手训练营

第一课:亚马逊云科技简介

本课程帮助您初步了解云平台与本地环境的差异,以及亚马逊云科技平台的基础设施和部分核心服务,包括亚马逊云科技平台上的弹性高可用架构,架构设计准则和本地架构迁移上云的基本知识。

亚马逊云科技技术讲师:李锦鸿

第二课:存储与数据库服务

您将在本课程中学习到亚马逊云科技上的三个存储服务分别是什么。我们也将在这个模块中为您介绍亚马逊云科技上的关系型数据库服务 Amazon Relational Database Service (RDS)。

亚马逊云科技资深技术讲师:周一川

第三课:安全、身份和访问管理

在这个模块,您将学习到保护您在亚马逊云科技上构建的应用的安全相关知识,责任共担模型以及身份和访问管理服务, Identity and Access Management (IAM) 。同时,通过讲师演示,您将学会如何授权给 EC2 实例,允许其访问 S3 上的资源。

亚马逊云科技技术讲师:马仲凯

了解更多入门学习计划 »

快速上手训练营

账单设置与查看

账单设置与查看

立即注册,免费试用 Amazon EC2 T4g 实例

新老用户现可享受每月 750 小时的免费 t4g.small 实例使用时长,优惠期至 2025 年 12 月 31 日!

打开中国区账号注册页面

01 填写您 注册账号的邮箱,点击“继续”

02 查看您的 注册账号邮箱

注: 发件箱 no-reply@register.signin.amazonaws.com.cn

03 输入 邮箱中收到的验证码,点击“继续”

注: 该链接中的内容显示语言是与您的网页浏览器设置相一致的,您可以根据需要自行调整语言栏。

立即开始注册 »

image

填写用户名密码

01 请设置您的 账号用户名

02 为您的帐号 设置密码

03 重新 输入密码

立即开始注册 »

图片

填写账号联系人以及公司信息

01 填写公司联系人 姓名全称

02 填写公司联系人的 联系电话

03 填写 公司名称

注: 公司名称请务必与您所提供的营业执照公司名称保持一致

04 填写 公司办公地址

注: 省份/自治区/直辖市 - 城市 - 区 - 街道门牌号以及楼层信息 - 邮政编码

05 请选择 是否需要发票

注: *附件-申请发票流程 供您参考

06 点击查看 客户协议 勾选方框表示您已阅读,并同意客户协议的条款

立即开始注册 »

图片

企业信息验证

01 在此上传 企业注册执照

02 请填写网络安全负责人的 姓名

注: 该字段务必与您下方提供的身份证号匹配或与证件上的姓名保持一致

03 请填写网络安全负责人的 联系方式

注: 有效的电子邮件地址 - 有效的中国内地 手机号码 - 座机号码(如无座机,请填写正确有效的手机号码)

04 在此上传网络安全负责人的 身份证件

注: 当您选择证件类型为“身份证”时,您需要填写正确的身份证号码,选择其他证件类型时,您需要上传证件扫描稿

立即开始注册 »

图片

手机验证与支持计划

01 在此填写 手机号

02 请输入您收到的 4 位 验证码

03 请点击 继续

04 请根据需求 选择一个支持计划

立即开始注册 »

图片