美文网首页
GraphQL 快速入门【1】简介

GraphQL 快速入门【1】简介

作者: 码者无疆 | 来源:发表于2021-09-13 11:55 被阅读0次

    【注】本文节译自:GraphQL - Quick Guide (tutorialspoint.com)

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

    为什么使用 GraphQL

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

    询问你想要的 - 并得到它

        向您的 API 发送 GraphQL 查询并准确获取您需要的内容。GraphQL 查询总是返回可预测的结果。使用 GraphQL 的应用程序且稳定。与 Restful 服务不同,这些应用程序可以限制应该从服务器获取的数据。
        以下示例将帮助您更好地理解这一点:
        让我们考虑一个具有属性 idfirstNamelastNameCollegeName 的业务对象 Student。假设一个移动应用只需要获取 firstNameid。 如果我们设计一个像 /api/v1/students 这样的 REST 端点,它最终会为一个 Student 对象的所有字段获取数据。这意味着,数据被 RESTful 服务过度获取。 这个问题可以通过使用 GraphQL 来解决。
        考虑下面给出的 GraphQL 查询:

    {
      {
        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 还提供了客户端库,可以帮助减少显式数据转换和解析。
        下面给出了 StudentCollege 数据类型的示例:

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

    相关文章

      网友评论

          本文标题:GraphQL 快速入门【1】简介

          本文链接:https://www.haomeiwen.com/subject/ulffgltx.html