在 GraphQL 中,Arguments 是定义在 Field、Directive 和 Fragment Spread 等属性上的一种对象类型。它们可以接收值,来限制查询的结果范围、做运算、过滤,实现更加灵活和有逻辑的查询。
Arguments 的基本格式
Arguments 被定义在括号 ( )
内,通常在 Field 上,如下所示:
field(argument: value)
field
表示查询字段的名称。argument
表示 Arguments 的名称。value
表示 Arguments 的值,可以是字符串、数字、布尔值、可选类型、枚举等。
在 Schema 中,Arguments 的定义通常包含以下属性:
name
:Arguments 的名称。description
:对 Arguments 的描述,可以通过""" """
来多行输入。type
:Arguments 的类型,可以是 String、Int、Float、Boolean 以及自定义类型等。
如下是一个简单的 Schema 示例:
-- -------------------- ---- ------- ---- ----- - -------- ------ ---- - ---- ---- - --- ---- ----- ------- ---- --- -
在 Query 类型中,定义了一个 user
的查询字段,它接收一个名为 id
的 Arguments,类型为非空的整数 Int!
。在 User 类型中,定义了 id
、name
和 age
三个具有不同类型的字段,来描述用户的信息。
Arguments 的使用示例
在实际应用中,Arguments 可以用来实现查询的多样性和筛选。以一个用户比较系统为例,我们可以根据姓名、年龄、性别等因素来查询用户,并对查询结果进行排序、分页等操作。
首先是查询用户列表,可以使用一个 users
查询字段来实现,它包含了两个 Arguments:page
和 perPage
,分别表示当前页数和每页数据的数量:
type Query { users(page: Int, perPage: Int): [User!]! }
然后是查询用户信息,我们可以通过姓名、年龄、性别等因素来查询用户,以一个 user
查询字段为例:
-- -------------------- ---- ------- ---- ----- - -------- ------ ---- ---------------- --------- -------- ------------------- ----- ---- ------ -------- --------------------- --------- -------- - ---- ------ - ---- ------ - ---- ---- - --- ---- ----- ------- ---- --- ------- ------ -
这里我们定义了四个具有不同 Arguments 的查询字段,分别实现了根据名称、年龄范围和性别来查询用户的功能。Gender 类型是一个枚举类型,定义了两个值:MALE 和 FEMALE。
最后是对查询结果进行排序和分页的功能,我们可以通过常见的 orderBy
和 pagination
两个 Arguments 来实现,如下所示:
-- -------------------- ---- ------- ---- ----- - ------ -------- ---------- ----------- --------------- -- -------- - ----- --------------- - ----- --- -------- --- -
这样,我们就可以根据需要来灵活地查询用户信息,实现更加强大和灵活的功能了。
Arguments 的注意事项
在使用 Arguments 时,我们需要注意以下事项:
- Arguments 的值有时候需要验证和转换,可以在 resolvers 中进行处理。
- Arguments 有一些内置的类型,包括 Scalar、Enum、List 和 Input Object 等。我们也可以自定义 Arguments 类型。
- Arguments 的名称和类型对于运行时的查询来说是必要的,这意味着我们需要对 Schema 进行类型检查和文档化,以便更好地维护和管理。
总结
在本文中,我们介绍了 Arguments 在 GraphQL Schema 中的定义和使用方式。作为查询时的一个重要组成部分,Arguments 可以帮助我们实现更加灵活和智能的查询。如果你是一名前端开发人员,学习和掌握 GraphQL 的 Arguments 将对你的开发工作有所帮助,推荐进一步深入学习。
参考链接
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c873605ad90b6d0413a2e4