返回介绍

二、GraphQl 类型系统

发布于 2024-01-31 23:34:12 字数 2497 浏览 0 评论 0 收藏 0

2.1 GraphQl 类型

可以将 GraphQL 的类型系统分为 标量类型 (ScalarTypes,标量类型)和其他 高级数据类型 ,标量类型即可以表示最细粒度数据结构的数据类型,可以和 JavaScript 的原始类型对应

GraphQL 规范目前规定支持的标量类型有

  • Int:有符号 32 位整数 – GraphQLInt
  • Float:有符号双精度浮点值 – GraphQLFloat
  • StringUTF‐8 字符序列 – GraphQLString
  • Booleantrue 或者 falseGraphQLBoolean
  • ID(GraphQLID):ID 标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存中的键。ID 类型使用和 String 一样的方式序列化;然而将其定义为 ID 意味着并不需要可读型。

GraphQL 其他高级数据类型包括

  • Object:对象(newGraphQLObjectType)

用于描述层级或者树形数据结构。对于树形数据结构来说,叶子字段的类型都是标量数据类型。几乎所有 GraphQL 类型都是对象类型。Object 类型有一个 name 字段,以及一个很重要的 fields 字段。fields 字段可以描述出一个完整的数据结构。例如一个表示地址数据结构的 GraphQL 对象为

const AddressType=newGraphQLObjectType({
  name:'Address',
  fields:{
    street:{
      type:GraphQLString
    },
    number:{
      type:GraphQLInt
    },
    formatted:{
      type:GraphQLString,
      resolve(obj){
        return obj.number+''+obj.street
      }   
    }
  }
});
  • Interface :接口用于描述多个类型的通用字
  • Union :联合类型用于描述某个字段能够支持的所有返回类型以及具体请求真正的返回类型
  • Enum :枚举用于表示可枚举数据结构的类型
  • InputObject :输入对象
  • List :列表

列表是其他类型的封装,通常用于对象字段的描述。例如下面 PersonType 类型数据的 parents 和 children 字段

const PersonType=newGraphQLObjectType({
  name:'Person',
  fields:()=>({
    parents:{type:newGraphQLList(Person)},
    children:{type:newGraphQLList(Person)},
  })
})
  • Non-Null :不能为 Null

Non-Null 强制类型的值不能为 null ,并且在请求出错时一定会报错。可以用于必须保证值不能为 null 的字段。例如数据库的行的 id 字段不能为 null

const RowType=newGraphQLObjectType({
  name:'Row',
  fields:()=>({
    id:{
      type:newGraphQLNonNull(GraphQLString)
    }
  })
})

2.2 GraphQl 查询语言

GraphQL 规范支持两种操作

  • query :仅获取数据( fetch )的只读请求
  • mutation :获取数据后还有写操作的请求

新版本的 GraphQL 还支持 subscription ,这是为了处理订阅更新这种比较复杂的实时数据更新场景而设计的操作

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文