GraphQL 介绍-1
本篇文章将针对GraphQL的type和field进行介绍,如果您已经熟悉上述的部分,想直接看如何使用CRUD的部分可以直接看后面一些的文章
笔者想把这GraphQL的部分拆的散一点,读起来比较知道停损点在哪里,也让自己有一种又看完了一篇学了好多东西的错觉 XD
Type和Field
笔者认为这两个东西很常被搞混,也不好说明,于是做了一个比较明确的图片方便大家查看,图中说明了一个type是如何构成
就先介绍里层的 Field 再介绍外层的 Type吧~
Field
Field Names
从名称来看可以知道这是一个餐点的结构,里面包涵id,名称,价格还有是否停售的栏位
Field Types
在原生的GraphQL是一种强型别的定义方式,只有五种Type分别是:Int,Float,String,Boolean和ID,除此之外的任何Type都需要自己定义(实作时会教学怎么自己定义),如果有在Field的后面看到!
表示这个栏位不能是null
# Typestype Meal { id: ID! itemName: String! price: Int! isStopSelling: Boolean!}
总结以上的定义为 餐点会有一个id型别为ID,会有品项名称型别为String,价格型别为整数,最后还有是否停售型别为布林值,且以上栏位的值皆不可为null
Type
Type Declaration
这里目前看到的皆为 type,后续有遇到其他的值会在特别说明用途
Type Name
上述範例中的Meal就是在定义一个资料的 type
除了我们可以自己定义的type name之外,GraphQL也有一些定义好的关键字会附带特别的效果,先来介绍第一个拥有查询效果的关键字-Query
Type Name(Query)
# Typestype Meal { id: ID! itemName: String! price: Int! isStopSelling: Boolean!}# Define queries heretype Query { meal(id: ID!): Meal! meals: [Meal!]!}
凡是在 Type Name 使用了 Query(大小写有差) 时,表示这是一个作为查询用的 Type
所以这里做的是定义一个 field name 为:meal 及 meals,也可以想像是定义后端传给前端的 Object,以资料列表来说,前端可能就会期待收到一个阵列的 meals:[Meal!]!,如果是对单一品项编辑的表单,前端就会期待收到一个单纯的 meal:Meal
这边再针对五种案例特别说明
meal:Meal# 合法的: null obj# 不合法的: 无
meal:Meal!# 合法的: obj# 不合法的: null
meals:[Meal]# 合法的: null [] [obj] [null] # 不合法的: 无
meals:[Meal!]# 合法的: null [] [obj] # 不合法的: [null] [obj, null]
meals:[Meal!]!# 合法的: [] [obj] # 不合法的: null [null] [obj, null]
需要注意的有两点
ID: GraphQL中的ID并不是指UUID,其实他就是一个字串,主要是为了表示这个值是唯一的,在被使用时也不会检查型别(用a,b,c也行,但请绝对不要这么做)!(惊叹号): GraphQL中的!表示这个值一定会有内容不会是null,在实作时没加也不会影响功能,不过建议该用的时候还是要用,主要也是为了工程师好阅读(维护)定义完以上内容,透过gqlgen就可以帮我们产出这样的一份PlayGround,可以很明确的看出,我们有两个query的方法可以使用,至于详细的用法将会放到下一篇的CRUD进行介绍
小结:这边比较是针对type及field进行介绍,也说明了如何定义一个资料的type以及把该type放到query中使用
以上若有错误,还请不吝指教.谢谢
下一篇 GraphQL-Mutation,input