开发手册 欢迎您!
软件开发者资料库

GraphQL - 简介

GraphQL简介 - 从简单和简单的步骤学习GraphQL,从基本到高级概念,包括简介,环境设置,架构,应用程序组件,示例,类型系统,架构,解析器,查询,变异,验证,JQuery集成,React集成, Apollo客户端,身份验证客户端,缓存。

GraphQL是一种开源服务器端技术,由Facebook开发,用于优化RESTful API调用.它是一个执行引擎和一种数据查询语言.在本章中,我们将讨论使用GraphQL的优势.

为什么使用GraphQL

RESTful API遵循清晰且结构良好的面向资源的方法.但是,当数据变得更复杂时,路由会变得更长.有时无法通过单个请求获取数据.这是GraphQL派上用场的地方. GraphQL以图形的形式构建数据,其强大的查询语法用于遍历,检索和修改数据.

以下是使用GraphQL查询语言的优点 :

询问你想要的东西并获取它

向您的API发送GraphQL查询并获得您所需要的. GraphQL查询始终返回可预测的结果.使用GraphQL的应用程序快速而稳定.与Restful服务不同,这些应用程序可以限制应该从服务器获取的数据.

以下示例将帮助您更好地理解这一点;

让我们考虑一个业务对象 Student ,其属性为 id,firstName,lastName collegeName .假设移动应用程序只需要获取 firstName id .如果我们设计一个REST端点,如/api/v1/students ,它将最终获取 student 对象的所有字段的数据.这意味着,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 ,它具有以下属性:名称和位置. 学生业务对象与College对象具有关联关系.如果我们要使用REST API来获取学生及其大学的详细信息,我们最终会向服务器发出两个请求,例如/api/v1/students /api/V1/学院的.这将导致每次请求获取数据不足.因此,移动应用程序被迫多次调用服务器以获取所需数据.

但是,移动应用程序可以使用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还提供了有助于减少显式数据转换和解析的客户端库.

学生 College 数据的示例类型在下面和下面给出;

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和智能代码完成功能.