GraphQL 是一种用于 API 的查询语言,它提供了一种更为灵活、强大、易于理解的方式来描述数据。在 GraphQL 中,类型是非常重要的概念,类型定义可以定义查询中可以返回的字段以及端点支持的操作。本文将详细介绍 GraphQL 中类型定义的语法和应用。
基础类型
GraphQL 中有五种基础类型:Int
、Float
、String
、Boolean
和 ID
。分别表示整数、浮点数、字符串、布尔值和唯一标识符。这些类型可以直接在类型定义中使用,如下所示:
---- ------- - --- --- ----- ------- ------ ------ ------------ ------ ---------- -------- ------ ---- -
在上面的例子中,Product
类型包含了五个基础类型字段,其中 ID
和 String
类型后面的感叹号表示该字段是必选的,即在返回结果中一定会包含该字段。
自定义类型
GraphQL 中不仅支持基础类型,还支持自定义类型。自定义类型可以包含任意递归嵌套的其他类型,因此类型定义的灵活性非常高。自定义类型的定义方式如下:
---- ---- - --- --- ----- ------- ------ ------- ------ -------- - ---- ---- - --- --- ------ ------- -------- ------- ------- ----- --------- ----------- - ---- ------- - --- --- -------- ------- ------- ----- ----- ----- -
在上面的例子中,我们定义了三个自定义类型:User
、Post
和 Comment
。User
类型包含了一个数组类型的 Post
字段,Post
类型包含了一个 User
类型的 author
字段和一个数组类型的 Comment
字段,Comment
类型包含了 User
和 Post
类型的字段。这种嵌套、关联的自定义类型可以方便地构建复杂的数据结构。
枚举类型
枚举类型在 GraphQL 中也十分重要,它可以枚举所有可能的值,限制输入参数的范围并使得查询结果更加明确。枚举类型的定义方式如下:
---- -------- - ----- ---- ----- - ---- ---- - --- --- ----- ------- ------ ------- ----- --------- -
在上面的例子中,我们定义了一个 UserRole
枚举类型,包含了三个可能的值:ADMIN
、USER
和 GUEST
。User
类型中的 role
字段使用了这个枚举类型来限制输入的参数。
嵌套类型
GraphQL 中,类型可以会互相嵌套,形成复杂的关联关系。嵌套类型可以方便的表示各种对象之间的关联关系,例如文章和评论等。嵌套类型的定义方式如下:
---- ---- - --- --- ----- ------- - ---- ------- - --- --- -------- ------- ------- ----- -
在上面的例子中,我们定义了一个 Comment
类型,包含了一个 User
类型的 author
字段。这表示一篇评论一定由一个用户发表,这种关联关系可以方便地构建出复杂的对象和关系。
接口和实现
在 GraphQL 中,接口和实现提供了一种(模糊)对象类型的概念,即可以定义一个对象类型,但不指定其字段、操作或默认值。这样,这个对象类型就可以被多种实现方式替换。接口类型的定义方式如下:
--------- ---- - --- --- - ---- ---- ---------- ---- - --- --- ----- ------- -
在上面的例子中,我们定义了一个 Node
接口,它包含了一个 ID
字段,表示所有使用该接口的类型都必须包含一个 ID
字段。User
类型实现了 Node
接口,因此它必须包含一个 ID
字段。这种接口实现的方式可以方便地定义共享类型,从而可以一次性执行多个查询。
前缀修饰类型
GraphQL 中,可以使用前缀修饰符来定义特殊类型,例如列表、非空类型和可选类型。这些修饰符非常有用,可以更精细地控制返回结果中的类型。前缀修饰类型的定义方式如下:
---- ----- - -------- ----- ---- ------------ ---- ----- ----- -------- ------------ --------- ------- - ---- ---- - --- --- ----- ------- - --------- ---- - --- --- - ---- ---- - --- --- ------ ------- ------- ----- --------------- --- - ---- ---------- - ---- ------- - --- --- -------- ------- ------- ----- -
在以上的例子中,我们使用了前缀修饰符来定义不同类型。例如:
users(limit: Int, skip: Int): [User!]!
:定义了一个返回“用户”列表的查询,在列表前使用了前缀[]
表示它是列表类型。使用了!
表示它是一个必选类型。comments(limit: Int = 10): [Comment!]
:定义了一个返回“评论”列表的查询,在列表前使用了前缀[]
表示它是列表类型。limit
参数默认为 10,!
表示它是一个必选类型。
总结
在 GraphQL 中,类型是非常重要的概念,它定义了查询中可以返回的字段以及端点支持的操作。本文介绍了 GraphQL 中基础类型、自定义类型、枚举类型、嵌套类型、接口和实现以及前缀修饰类型的定义方式。希望通过本文的详细介绍,读者可以更加深入地理解 GraphQL 类型系统,并能够更加熟练地运用类型定义语法。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64d0c0f3b5eee0b5257bdbad