漏洞赏金猎人笔记-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

目录
相关文章
|
7月前
|
安全 JavaScript 前端开发
赏金猎人必学站点(梯外)
赏金猎人必学站点(梯外)
|
存储 算法 搜索推荐
外网疯传!字节大佬闭关三月撰写的数据结构与算法笔记遭恶意开源
数据结构与算法的定义 数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构的相互关系,并对这种结构定义相适应的运算,,确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“
55 0
|
JSON 安全 C语言
黑客需要用到的Python技术?
黑客需要用到的Python技术?
|
SQL 安全 网络协议
PortSwigger之SQL注入实验室笔记(三)
PortSwigger之SQL注入实验室笔记
208 0
PortSwigger之SQL注入实验室笔记(三)
|
SQL 安全 Oracle
PortSwigger之SQL注入实验室笔记(二)
PortSwigger之SQL注入实验室笔记
342 0
PortSwigger之SQL注入实验室笔记(二)
|
SQL Oracle 安全
PortSwigger之SQL注入实验室笔记(一)
PortSwigger之SQL注入实验室笔记
341 0
PortSwigger之SQL注入实验室笔记(一)
|
JSON 安全 前端开发
漏洞赏金猎人笔记-GraphQL-I
为了方便理解,这里从一个例子出发来理解GraphQL 通常情况下,当你想获取有关书籍和作者的详细信息时,用REST API的风格写为:
241 0
漏洞赏金猎人笔记-GraphQL-I
|
前端开发 安全
漏洞赏金猎人笔记-GraphQL-III
前面介绍了query、mutation这两种类型的操作,今天将要介绍最后一种类型的操作:subscription
353 0
漏洞赏金猎人笔记-GraphQL-III
|
数据采集 域名解析 XML
漏洞猎人赏金笔记-如何编写Bug Bounty自动化脚本
前言 本文原文作者为@pry0cc,本文主要是对原文相关内容的提炼以及笔记,出于易读性考虑,笔者对很多地方做了一定量的注释或者删改(因为原文中的脚本存在一定问题)。 本文主要讲解的是经典的自动化信息搜集以及数据处理和漏洞扫描的流程.
575 0
漏洞猎人赏金笔记-如何编写Bug Bounty自动化脚本