GraphQL 是一个用于 API 的查询语言,由 Facebook 在 2012 年提出,并在 2015 年正式开源发布。相较于 RESTful API,GraphQL 允许客户端自由地指定需要的数据,从而消除了传统 API 风格中的请求-响应循环,缩短了网络请求时长,提高了 Web 应用的效率。
作为前端开发人员,一个掌握 GraphQL 的基本语法和查询语法是很必要的。本文将为你详细讲解 GraphQL 中的查询语言,并通过示例代码,深入浅出地指导你如何自由地构建自己的 GraphQL 查询语句。
GraphQL 查询的基础语法
在 GraphQL 中,所有操作都始于一个查询。查询任务是要求一个特定的结构化数据,通常是一个 JSON 格式的响应。一个基本的查询看起来像这样:
{ field1, field2, field3{ nestedField1 nestedField2 } }
在一个查询中,每个 field 的名称都对应着返回对象中的一个键值。如果 field 后跟着一对大括号,那么这个字段就有一个返回嵌套对象的子查询。如果要在查询中指定多个字段,则将这些字段都罗列出来,以逗号分隔。
查询参数的使用
GraphQL 支持参数,因此我们可以将参数传递到查询指令中,以便定制和过滤查询结果。要定义参数,只需在查询的字段名称后面添加小括号,包含一个或多个参数名称。例如:
{ user(id: 123) { name email } }
其中 id
参数将通过关键字 id
的值检索特定用户的记录。
分页查询
有时,当处理返回大量数据的查询时,我们需要对数据进行分页以提高性能,GraphQL 允许我们定义添加用于分页的参数。例如:
{ users(page: 2, pageSize:10) { name email } }
其中,page
和 pageSize
参数可用于指定要检索的页数和每页要返回的记录数。
操作 Aliases
GraphQL 的查询可以操作别名,以便在查询的结果集中使用相同的对象或字段名称。别名可以使查询更具可读性和可维护性。例如:
-- -------------------- ---- ------- - ---- -------- ------ - ---- ----- - ---- -------------- - ---- ----- - -
上述查询将会通过别名 one
和 two
在同一页之间返回两个相似的 user
对象。
Fragment 的使用
在一个大类型查询中,我们可能需要多次使用相同的查询组。此时,我们可以使用 Fragment 来返回相同的查询组,以便提高查询的可读性和易于维护性。例如:
-- -------------------- ---- ------- -------- ---------- -- ---- - ---- ----- - - -------- ---- - ------------- - ----- - ------------- - -
这里,我们定义了一个名为 userFields
的 Fragment,它将返回 name
和 email
字段,并在查询中被多次使用。
Mutation
与查询不同,Mutation 用于在 GraphQL API 中的数据完全性方面起到UD(Create、Update、Delete)作用,称为操作数据的方式。一个基本的 Mutation 如下:
-- -------------------- ---- ------- -------- - ------------------- - ----- - ----- ---- -------- ------------ -- --- -------- - -- - ------ - -- ---- ----------- - - -
在这个 Mutation 定义中,我们请求服务器创建一个新的记录,然后检索该记录以确保其已成功创建。
结论
通过学习 GraphQL 中的查询语法,我们可以更准确地请求我们想要的数据,从而提高应用程序的性能。通过便捷的查询参数、分页查询、操作 Aliases 以及 Fragment 的使用,我们可以更有效地创建我们的新 Service API。希望本文可对你在 GraphQL 查询语法方面有所启发。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67088d4dd91dce0dc8724c57