乐趣区

关于graphql:GraphQL-快速入门1简介

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

    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 和智能代码实现性能。

退出移动版