📅  最后修改于: 2020-10-25 05:05:18             🧑  作者: Mango
GraphQL是由Facebook开发的用于优化RESTful API调用的开源服务器端技术。它是执行引擎和数据查询语言。在本章中,我们讨论使用GraphQL的优点。
RESTful API遵循清晰且结构良好的面向资源的方法。但是,当数据变得更复杂时,路由会更长。有时无法通过单个请求来获取数据。这是GraphQL派上用场的地方。 GraphQL具有强大的查询语法,可以遍历,检索和修改数据,从而以图的形式构造数据。
以下是使用GraphQL查询语言的优势-
将GraphQL查询发送到您的API并确切获得您所需要的。 GraphQL查询始终返回可预测的结果。使用GraphQL的应用程序快速且稳定。与Restful服务不同,这些应用程序可以限制应从服务器获取的数据。
以下示例将帮助您更好地理解这一点-
让我们考虑一个具有id,firstName,lastName和collegeName属性的业务对象Student 。假设移动应用程序仅需要获取firstName和id 。如果我们设计像/ api / v1 / students这样的REST端点,它将最终获取一个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 :名称和位置。学生业务对象与大学对象具有关联关系。如果要使用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和智能代码完成功能。