引言
GraphQL 是一种用于 API 的查询语言,它是由 Facebook 开发的一款全新的数据查询语言。如果你是前端开发者,想必已经听过许多关于 GraphQL 的赞誉之词。虽然 GraphQL 与传统的 RESTful API 有不同,但正是这些不同点让 GraphQL 在数据查询和传输方面变得更加高效。在本文中,我们将深入探讨 GraphQL 中的重要概念,包括 Schema、Query、Mutation、Resolver 及其如何运作以及如何使用这些概念在实际开发中进行数据查询。
Schema
Schema 是 GraphQL Query Language 的核心。它定义了数据模型、数据类型、查询及更新的操作,以及数据源的位置,我们可以定义一份从客户端可以查询的数据结构。相比于传统的 RESTful API,GraphQL 的 Schema 使得我们可以直接在客户端指定数据返回的具体结构,避免了在服务端进行多次数据请求以及数据处理的麻烦,极大地提升了数据查询的性能。下面是一个示例 GraphQL Schema:
-- -------------------- ---- ------- ---- ---- - --- --- ----- ------- ------ ------- - ----- --------------- - ----- ------- ------ ------- - ---- ----- - ----------- ----- ----- --------- -------- - ---- -------- - ----------------- ------------------ ----- -
这个 Schema 中定义了一个 User 类型,有 id、name、email 三个属性。它还定义了 getUser、getUsers 两个查询方法以及 createUser 更新方法。
Query
Query 是 GraphQL 技术栈中的重要概念之一,它的作用是定义数据的查询方式。GraphQL 的 Query 和传统的 RESTful API 不同之处在于,它能够返回客户端指定的任意数据结构,而且一个 query 可以由多个 Resolver 组合而成。
下面,我们使用上一节中的 Schema 来构造一个 Query。
query { getUsers { id name email } }
这个 Query 会返回所有的用户数据,其中包括每个用户的 id、name、email 三个属性。在客户端发起这个 Query 请求之后,GraphQL 运行时会根据 Resolver 自动获取数据并返回结果。
Mutation
Mutation 是 GraphQL 技术栈中的重要概念之一,它负责更新数据。与 Query 不同之处在于,Mutation 负责对数据进行修改、添加、删除等操作。
与上一节中的 Query 组合起来,可以构成以下完整的 GraphQL 操作:
-- -------------------- ---- ------- -------- - ----------------- ------ -------- ------ --------------------- - -- ---- ----- - -------- - -- ---- ----- - -
这个 Mutation 操作会在后台创建一个名为 Alice 的用户,并将用户信息返回给客户端。同时,我们还在 getUsers 查询中获取当前已有的所有用户。
Resolver
在 GraphQL 中,Resolver 是一种用于查询数据的函数。它决定了 Query 和 Mutation 在运行时能够返回什么数据。Resolver 函数可以接收多个参数,包括父级对象、输入对象以及上下文对象等。它们负责读取数据源,从而返回客户端请求的数据。
下面是一个示例 Resolver:
-- -------------------- ---- ------- ----- --------- - - ------ - ----- ---------- - ----- ----- - ----- ------------------- ------ ------ -- ----- ---------- - -- -- - ----- ---- - ----- ---------------------- ------ ----- -- -- --------- - ----- ------------- - ----- -- - ----- ---- - ----- ----------------------- ------ -------------- -- -- -- ----- ------------ - --- -------------- --------- ------------ ---------- ---
这个 Resolver 会根据 Query 和 Mutation 定义在 Schema 中的数据结构,从数据库中读取数据并返回结果。在上面的实现中,我们使用 Sequalize、Node.js 和 Apollo Server 构建了一个 GraphQL Server。
总结
本文介绍了 GraphQL 中的 Schema、Query、Mutation 和 Resolver 等重要概念,并给出了一个实现示例。相比于传统的 RESTful API,GraphQL 的 Schema 和 Query 等概念让数据查询和传输变得更加高效和灵活。如果你是一个前端开发者,那么学会 GraphQL 将对你的职业发展有很大的帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a650f748841e98942e9aa9