Baas接口标准(三)——GraphQL客户端开发之基本查询、添加操作名称、使用查询参数之变量、指令、别名、通过mutation关键字实现变更操作

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变量并非标量,而是一个输入类型
    • 参数的传递可以通过普通参数,也可以使用输入类型,一般较为复杂的数据采用输入类型

猜你喜欢

转载自blog.csdn.net/weixin_44867717/article/details/134257135
今日推荐