Baas接口标准(三)——GraphQL客户端开发之基本查询、添加操作名称、使用查询参数之变量、指令、别名、通过mutation关键字实现变更操作
第4章 GraphQL客户端开发
基本查询
按需获取需要的数据
// 查询hero对象的name属性
{
hero {
name
}
}
// 查结果
{
"data": {
"hero": {
"name": "lisi"
}
}
}
- 注意事项
- GraphQL只有一个URL地址,客户端查询的所有信息都通过该地址获取数据
- 可以更加需要按照实际的需求获取特定的数据
操作名称
有多个操作时,操作名称是必须的,为了调试的方便,推荐添加操作名
- 规则:操作类型 操作名称(操作名称自定义)
- 操作类型主要有如下两种
- query 用于查询
- mutation 用于变更操作(添加、修改、删除)
# 查询名称
query helloInfo {
hello
}
# 变更名称
mutation addUser {
addUser(userInput: {
uname: "lisi",
pwd: "123"
}) {
id
username
}
}
- 注意事项
- 推荐所有的查询和变更操作添加操作名称
查询参数
有时候需要根据特定的条件查询数据,此时可以使用查询参数
// 查询id是1,姓名是lisi的学生信息
query param {
stu(id: 1, sname: "lisi") {
sname
age
gender
}
}
// 查询结果
{
"data": {
"stu": {
"sname": "lisi",
"age": 12,
"gender": true
}
}
}
- 注意事项
- 查询字段可以携带参数,并且可以携带多个参数,参数之间通过逗号隔开
变量
有时字段的参数需要动态提供,而不是固定的值,此时可以使用变量,其实类似于函数中的形参
# $id: Int (变量名称: 变量类型)
query param($id: Int, $num: Float) {
stu(id: $id) {
id
sname
scores(num: $num) {
cname
score
}
}
}
// 分离的变量字典
{
"id": 1,
"num": 99
}
- 注意事项
- 变量类型必须是标量、枚举型或者输入对象类型
- 变量可以有默认值 ($id: Int = 1)
指令
有时候查询的字段数量不是固定的,此时可以通过指令的方式进行控制
- 两个指令
@include(if: Boolean)
仅在参数为true
时,包含此字段。@skip(if: Boolean)
如果参数为true
,跳过此字段。
query param($id: Int, $gender: Boolean!) {
stu(id: $id) {
id
sname
gender @include(if: $gender)
}
}
query param($id: Int, $gender: Boolean!) {
stu(id: $id) {
id
sname
gender @skip(if: $gender)
}
}
- 注意事项
- 可以通过这两个指令动态控制查询的字段数量
- 指令用到的变量定义时需要添加!,强制必须提供该值
别名
有时需要通过不同参数值查询相同字段信息,比如查询学生的数学和英语成绩
query alias {
stu {
id
sname
math: scores(cname: "数学") {
cname
score
},
english: scores(cname: "英语") {
cname
score
}
}
}
// 上面的查询结果如下
{
"data": {
"stu": {
"id": 1,
"sname": "张三",
"math": [
{
"cname": "数学",
"score": 98.5
}
],
"english": [
{
"cname": "英语",
"score": 99.5
}
]
}
}
}
- 注意事项
- 可以通过别名的方式获取特定某几项数据(查询结果的数据格式相同)
变更
改变服务器数据需要用到【变更】(mutation)操作
# 通过具体值方式传递参数
mutation addUserByParam {
addUserByParam(uname: "lisi", pwd:"abc") {
id
uname
pwd
}
}
# 通过变量方式传递参数
mutation addUserByInput($userInput: UserInput) {
addUserByInput(userInput: $userInput) {
id
uname
pwd
}
}
# 参数传递
{
"userInput": {
"uname": "lisi",
"pwd": "123"
}
}
- 注意事项
- 通过mutation关键字实现变更操作
- userInput变量并非标量,而是一个输入类型
- 参数的传递可以通过普通参数,也可以使用输入类型,一般较为复杂的数据采用输入类型