- GraphQL 教程
- GraphQL - 首页
- GraphQL - 简介
- GraphQL - 环境搭建
- GraphQL - 架构
- GraphQL - 应用组件
- GraphQL - 例子
- GraphQL - 类型系统
- GraphQL - 模式
- GraphQL - 解析器
- GraphQL - 查询
- GraphQL - 变异
- GraphQL - 验证
- GraphQL - JQuery 集成
- GraphQL - React 集成
- GraphQL - Apollo Client
- GraphQL - 客户端认证
- GraphQL - 缓存
- GraphQL 有用资源
- GraphQL - 快速指南
- GraphQL - 有用资源
- GraphQL - 讨论
GraphQL - 简介
GraphQL 是一种由 Facebook 开发的开源服务器端技术,用于优化 RESTful API 调用。它是一个执行引擎和数据查询语言。本章我们将讨论使用 GraphQL 的优势。
为什么选择 GraphQL
RESTful API 遵循清晰且结构良好的资源导向方法。但是,当数据变得更复杂时,路由会变得更长。有时无法通过单个请求获取数据。这就是 GraphQL 发挥作用的地方。GraphQL 以图形的形式构建数据,并具有强大的查询语法,用于遍历、检索和修改数据。
以下是使用 GraphQL 查询语言的优势:
索取所需内容 - 并获取它
向您的 API 发送 GraphQL 查询,并准确获取所需内容。GraphQL 查询始终返回可预测的结果。使用 GraphQL 的应用程序快速且稳定。与 RESTful 服务不同,这些应用程序可以限制应从服务器获取的数据。
以下示例将帮助您更好地理解这一点:
让我们考虑一个具有属性 `id`、`firstName`、`lastName` 和 `collegeName` 的业务对象 *学生*。假设一个移动应用程序只需要获取 `firstName` 和 `id`。如果我们设计一个像 `/api/v1/students` 这样的 REST 端点,它最终会为 *学生* 对象的所有字段获取数据。这意味着 RESTful 服务过度获取了数据。这个问题可以使用 GraphQL 来解决。
考虑以下 GraphQL 查询:
{ students { id firstName } }
这将仅返回 `id` 和 `firstname` 字段的值。查询不会为学生对象的其它属性获取值。上面所示查询的响应如下所示:
{ "data": { "students": [ { "id": "S1001", "firstName": "Mohtashim" }, { "id": "S1002", "firstName": "Kannan" } ] } }
单个请求获取多个资源
GraphQL 查询有助于平滑地检索关联的业务对象,而典型的 REST API 需要从多个 URL 加载。GraphQL API 在单个请求中获取应用程序所需的所有数据。即使在缓慢的移动网络连接上,使用 GraphQL 的应用程序也可以很快。
让我们再考虑一个业务对象 *学院*,它具有属性:名称和位置。*学生* 业务对象与学院对象具有关联关系。如果我们使用 REST API 来获取学生及其学院的详细信息,我们将最终向服务器发出两个请求,例如 `/api/v1/students` 和 `/api/v1/colleges`。这将导致每次请求都欠缺数据。因此,移动应用程序被迫向服务器发出多次调用以获取所需的数据。
但是,移动应用程序可以使用 GraphQL 在单个请求中获取学生和学院对象的详细信息。
以下是一个用于获取数据的 GraphQL 查询:
{ students{ id firstName lastName college{ name location } } }
上述查询的输出包含我们请求的那些字段,如下所示:
{ "data": { "students": [ { "id": "S1001", "firstName": "Mohtashim", "lastName": "Mohammad", "college": { "name": "CUSAT", "location": "Kerala" } }, { "id": "S1002", "firstName": "Kannan", "lastName": "Sudhakaran", "college": { "name": "AMU", "location": "Uttar Pradesh" } }, { "id": "S1003", "firstName": "Kiran", "lastName": "Panigrahi", "college": { "name": "AMU", "location": "Uttar Pradesh" } } ] } }
使用类型系统描述可能性
GraphQL 是强类型的,查询基于字段及其关联的数据类型。如果 GraphQL 查询中存在类型不匹配,服务器应用程序将返回清晰且有用的错误消息。这有助于客户端应用程序平滑地调试和轻松检测错误。GraphQL 还提供客户端库,可以帮助减少显式数据转换和解析。
以下是 *学生* 和 *学院* 数据类型的示例:
type Query { students:[Student] } type Student { id:ID! firstName:String lastName:String fullName:String college:College } type College { id:ID! name:String location:String rating:Float students:[Student] }
使用强大的开发者工具更快地开发
GraphQL 提供丰富的开发者工具来编写文档和测试查询。GraphiQL 是一个优秀的工具,它生成查询及其模式的文档。它还提供查询编辑器来测试 GraphQL API,并在构建查询时提供智能代码补全功能。