漏洞赏金猎人笔记-GraphQL-II

admin 2022年11月22日21:48:52评论98 views字数 1543阅读5分8秒阅读模式

漏洞赏金猎人笔记-GraphQL-II

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

前言

上一节我们学习了GraphQL的一些基础知识,本文继续深入研究,从对比的角度来切入,方便读者理解.

Mutation

在GraphQL中,只有两种类型的操作,就是queries 和 mutations.

如果说query类似于REST中的GET操作,那么Mutation就好比REST中的DELETE, PUT,PATCH方法,笔者用一句简单的话来概括一下:

query用来查询服务端的数据,而mutation用来修改服务端的数据

Mutation例子

假设有个宠物店的应用采用了GraphQL API。

获取所有宠物的query可能如下:

query GetAllPets {
pets {
name
petType
}
}

添加新宠物的mutation开起来是这样的:

# String! ---> !表示这个变量是必须的
mutation AddNewPet ($name: String!, $petType: PetType) {
addPet(name: $name, petType: $petType) {
id
name
petType
}
}

AddNewPet mutation预期得到name和petType变量的值,其请求的数据类似下面这样:

{
"name": "Rover",
"petType": "DOG"
}

mutation的响应中有类似下面这样的数据:

{
"data": {
"addPet": {
"id": 1
"name": "Wang Cai",
"petType": "DOG"
}
}
}

mutation和query对比

相同点(类似点)

Mutation和query的结构看起来非常类似,GraphQL操作结构一般如下所示:

漏洞赏金猎人笔记-GraphQL-II

img.png

不同点

mutation和query之间的一个真正区别是操作类型,query用于查询,mutation用于增/删/改数据

另外一个注意点:

在AddNewPet示例中,mutation的名称是addPet.

# String! ---> !表示这个变量是必须的
mutation AddNewPet ($name: String!, $petType: PetType) {
addPet(name: $name, petType: $petType) {
id
name
petType
}
}

这意味着在 GraphQL API 类型定义中,有这么一个字段,如下所示:

type Mutation {
addPet (name: String!, petType: PetType): AddPetResult!
}

服务器端配置

来看一个例子,使用了一个能够和petsAPI数据源(data source)进行的连接来添加一个新的宠物。

#这里是一个异步操作
const resolvers = {
...
Mutation: {
addPet: async (root, args, context) => {
const { name, petType } = args;
const newPet = await context.dataSources.petsAPI.addPet({ name, petType })
return {
id: newPet.id,
name,
petType
}
}
}
};

返回值

mutation也返回数据,这是mutation和query另一个相似之处。但是,mutation通常只返回创建的相关新数据。

参考

https://graphql.org/learn/queries/#mutations

https://www.apollographql.com/docs


原文始发于微信公众号(迪哥讲事):漏洞赏金猎人笔记-GraphQL-II

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月22日21:48:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   漏洞赏金猎人笔记-GraphQL-IIhttps://cn-sec.com/archives/1424114.html

发表评论

匿名网友 填写信息