GraphQL介绍-1 Schema,type,field

GraphQL 介绍-1

本篇文章将针对GraphQL的type和field进行介绍,如果您已经熟悉上述的部分,想直接看如何使用CRUD的部分可以直接看后面一些的文章

笔者想把这GraphQL的部分拆的散一点,读起来比较知道停损点在哪里,也让自己有一种又看完了一篇学了好多东西的错觉 XD

Type和Field

笔者认为这两个东西很常被搞混,也不好说明,于是做了一个比较明确的图片方便大家查看,图中说明了一个type是如何构成
http://img2.58codes.com/2024/20144476cJFRReWJ3c.png
就先介绍里层的 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进行介绍
http://img2.58codes.com/2024/20144476FkPPZkFVAP.png
http://img2.58codes.com/2024/20144476At551BUnhw.png
小结:这边比较是针对type及field进行介绍,也说明了如何定义一个资料的type以及把该type放到query中使用

以上若有错误,还请不吝指教.谢谢

下一篇 GraphQL-Mutation,input


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章