在现代 Web 应用程序中,数据关系变得非常复杂。 对于应用程序开发人员来说,处理这些请求变得更加复杂,因为应用程序的数据层需要处理一系列嵌套资料。 在这种情况下,GraphQL 是一种非常有用的工具,它可以帮助我们处理数据关系请求。
GraphQL 的优势
GraphQL 具有以下优势,可以帮助我们在处理数据关系时获得更好的结果:
更精确的控制
GraphQL 允许您根据客户端要求的内容精确控制受到影响的数据。 这意味着如果客户端只需要一些关系数据,则可以通过 GraphQL 中的查询来检索只有这些关系数据。
较少的往返次数
GraphQL 可以减少往返请求次数。 数据关系可能需要多次请求才能获得所需结果。 通过 GraphQL,你可以一次获取所有需要的信息,避免不必要的往返请求。
保留一致的 API
GraphQL 允许您使用自己的 API 服务器。 这降低了使用 API 服务器的工程师遭受更改影响的可能性,从而保留了一致的 API。
如何在 GraphQL 中处理关系请求
定义类型
在 GraphQL 中,一个 type 表示一个对象。你需要为你的数据建立一种类型,以帮助你组织数据,使数据查询更简化。 在定义类型时,你可以建立关系,以帮助你处理嵌套关系。
-- -------------------- ---- ------- ---- ---- - --- --- ----- ------- ------ ------- ------ -------- ---------- -------- - ---- ---- - --- --- ------ ------- ----- ------- ------- ----- -
在上面的代码中,我们定义了两种类型 User
和 Post
。在 User
类型中,我们定义了一个包含 Post
类型的数组的字段,并使用 !
表示它不会返回空值。 在 Post
类型中,我们定义了一个 author
字段,它是一个 User
类型,表示一个作者与一篇文章之间的关系。
解决响应
当应用程序需要查询/请求数据时,GraphQL 将查询字符串解析为执行计划,并将其转换为响应。这是一个 GraphQL 查询的示例:
-- -------------------- ---- ------- - -------- ---- - -- ---- ----- ----- - ----- ---- - - -
你可以在开始执行之前预期结果对象的形状,所以你的代码将非常适合你的应用程序逻辑和查询结构。在解决响应时,你可以指定每个字段与那个函数匹配。 下面是一个处理上面查询的函数的示例:
-- -------------------- ---- ------- -------- ------------------- ----- -------- ----- - ----- -- - -------- ----- ---- - ---------------- ----- ------ - - --- -------- ----- ---------- ------ ----------- ------ ------------------- -- -- ------ ----------- ----- --------- --- - ------ ------- - ----- --------- - - ------ - ----- ----------- - --
在上面的代码中,我们定义了一个函数 resolveUser
,该函数将接收 parent,args,context,info
四个参数。 我们使用 args
中的 id
来获取 user
对象。
以可读格式输出响应
GraphQL 查询需要指定返回的字段。你可以使用一个优秀的库GraphQL插件 GraphQL-Yoga来处理所有这些事情。GraphQL-Yoga 将响应模板和模式转换为输出字符串,并检查模式是否正确。以下是我们如何使用 GraphQL-Yoga 处理上面的查询:
import { GraphQLServer } from 'graphql-yoga'; const server = new GraphQLServer({ schema: schema, // Our schema resolvers: resolvers // Our resolvers }); server.start(() => console.log('Server is running on localhost:4000 ...'));
在以上代码中,我们创建了一个 GraphQL Yoga 服务器,我们添加了需要执行的架构和解析器。
总结
以上是在 GraphQL 代码中处理关系请求的方式。 我们学习了有关 GraphQL 的优势以及如何在 GraphQL 中处理数据关系。 我们还学习了如何定义类型以及如何解析响应。 如果你正在开发基于数据关系的 Web 应用程序,请考虑使用 GraphQL。GraphQL 不仅可以将数据组织在一起,而且还可以帮助你更有效地查询数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6480044748841e9894f864cd