- GraphQL Tutorial
- GraphQL - Home
- GraphQL - Introduction
- GraphQL - Environment Setup
- GraphQL - Architecture
- GraphQL - Application Components
- GraphQL - Example
- GraphQL - Type System
- GraphQL - Schema
- GraphQL - Resolver
- GraphQL - Query
- GraphQL - Mutation
- GraphQL - Validation
- GraphQL - JQuery Integration
- GraphQL - React Integration
- GraphQL - Apollo Client
- GraphQL - Authenticating Client
- GraphQL - Caching
- GraphQL Useful Resources
- GraphQL - Quick Guide
- GraphQL - Useful Resources
- GraphQL - Discussion
GraphQL - 简介
GraphQL 是一种开源服务器端技术,由 Facebook 开发,用于优化 RESTful API 调用。它是一个执行引擎和一种数据查询语言。在本章中,我们讨论使用 GraphQL 的优点。
为什么选择 GraphQL
RESTful API 遵循清晰且结构良好的面向资源的方法。然而,当数据变得更加复杂时,路线就会变得更长。有时不可能通过单个请求获取数据。这就是 GraphQL 派上用场的地方。GraphQL 使用强大的查询语法以图形的形式构建数据,用于遍历、检索和修改数据。
以下是使用 GraphQL 查询语言的优点 -
询问你想要什么 - 并得到它
将 GraphQL 查询发送到您的 API,并准确获取您需要的内容。GraphQL 查询始终返回可预测的结果。使用 GraphQL 的应用程序快速且稳定。与 Restful 服务不同,这些应用程序可以限制应从服务器获取的数据。
以下示例将帮助您更好地理解这一点 -
让我们考虑一个具有id、firstName、lastName和CollegeName属性的业务对象Student。假设移动应用程序只需要获取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 的应用程序也可以很快。
让我们考虑另一个业务对象,College,它具有以下属性:名称和位置。Student业务对象与College对象有关联关系。如果我们要使用 REST API 来获取学生及其大学的详细信息,我们最终将向服务器发出两个请求,例如/api/v1/students和/api/v1/colleges。这将导致每个请求的数据获取不足。因此,移动应用程序被迫多次调用服务器才能获取所需的数据。
但是,移动应用程序可以使用 GraphQL 在单个请求中获取 Student 和 College 对象的详细信息。
以下是用于获取数据的 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 和智能代码完成功能。