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

简介: 上一节我们学习了GraphQL的一些基础知识,本文继续深入研究,从对比的角度来切入,方便读者理解.Mutation在GraphQL中,只有两种类型的操作,就是queries 和 mutations.如果说query类似于REST中的GET操作,那么Mutation就好比REST中的DELETE, PUT,PATCH方法,笔者用一句简单的话来概括一下:query用来查询服务端的数据,而mutation用来修改服务端的数据

前言


上一节我们学习了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操作结构一般如下所示:

37.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

目录
相关文章
|
3月前
|
安全 JavaScript 前端开发
赏金猎人必学站点(梯外)
赏金猎人必学站点(梯外)
|
6月前
|
SQL 安全 测试技术
花无涯带你走进黑客世界之好用的渗透测试神器
隔着屏幕的祝福送给大家,祝大家端午安康,我就不群发骚扰了,看到的都好运 -。- 安全研究者对网站或者应用程序进行渗透测试而不用任何自动化工具似乎已越来越难。 花无涯带你走进黑客世界 2 学习渗透技术
|
SQL 安全 网络协议
PortSwigger之SQL注入实验室笔记(三)
PortSwigger之SQL注入实验室笔记
152 0
PortSwigger之SQL注入实验室笔记(三)
|
SQL 安全 Oracle
PortSwigger之SQL注入实验室笔记(二)
PortSwigger之SQL注入实验室笔记
282 0
PortSwigger之SQL注入实验室笔记(二)
|
JSON 安全 前端开发
漏洞赏金猎人笔记-GraphQL-I
为了方便理解,这里从一个例子出发来理解GraphQL 通常情况下,当你想获取有关书籍和作者的详细信息时,用REST API的风格写为:
192 0
漏洞赏金猎人笔记-GraphQL-I
|
前端开发 安全
漏洞赏金猎人笔记-GraphQL-III
前面介绍了query、mutation这两种类型的操作,今天将要介绍最后一种类型的操作:subscription
303 0
漏洞赏金猎人笔记-GraphQL-III
|
数据采集 域名解析 XML
漏洞猎人赏金笔记-如何编写Bug Bounty自动化脚本
前言 本文原文作者为@pry0cc,本文主要是对原文相关内容的提炼以及笔记,出于易读性考虑,笔者对很多地方做了一定量的注释或者删改(因为原文中的脚本存在一定问题)。 本文主要讲解的是经典的自动化信息搜集以及数据处理和漏洞扫描的流程.
412 0
漏洞猎人赏金笔记-如何编写Bug Bounty自动化脚本
|
安全 Shell
赏金猎人系列-如何测试sso相关的漏洞
前言 前面写过一篇有关sso绕过的相关文章:你所不知道的sso绕过tips,而本文主要总结的是sso漏洞相对比较系统的的测试方法,限于篇幅,这里会分为两篇来叙述,今天为第一篇;
222 0
|
XML 安全 Go
赏金猎人系列-如何测试sso相关的漏洞(II)
前言 本文承接前文:赏金猎人系列-如何测试sso相关的漏洞,继续梳理sso漏洞相关的测试方法.
129 0
|
Web App开发 安全 Java
Facebook 被曝雇用公司抹黑 TikTok;Spring 承认 RCE 大漏洞;Chrome 100 发布 | 思否周刊
Facebook 被曝雇用公司抹黑 TikTok;Spring 承认 RCE 大漏洞;Chrome 100 发布 | 思否周刊
161 0

热门文章

最新文章

相关实验场景

更多