小试GraphQL

2023-09-21 16:32:32

之前做的需求,基本都是REST风格,以github提供的api为例,比较二者差异。试用GraphQL,找寻其独到之处


REST

REST[1]

  • 一个URI代表一种资源

  • 通过HTTP动词对资源进行操作


创建一个仓库[2]为例

alt
alt

GET[3],

PATCH[4]DELETE[5]类似



GraphQL

  • GraphQL的endpoint只有一个

  • 所有请求都是POST


可以在 Exploer[6]左边写查询,右边显示结果。

查询当前登录的用户名:

alt

查询Go项目当前的star数:

alt

GraphQL的endpoint只有一个,即

https://api.github.com/graphql

使用Postman:

alt

使用querymutation来区分是查询还是修改

alt

二者区别

  • REST一个URI就是一个资源,GraphQL只有一个URI

  • REST返回所有的内容,response体积较大,GraphQL可以只返回需要的数据,返回值体积小

GraphQL是一种语言,有自己的语法和类型系统

alt

会有错误提示~

alt

GraphQL的优势:

  • 取你所需要的数据,不多也不少

           n+1问题[7]

  • nesting(嵌套查询)

            比如想取一个pr的commits、comment、reviews,用REST需要请求四次,然后还需要对返回值进行组装;而用GraphQL则只需要一次请求,拿到的就是需要的数据

alt

资源孤岛 (REST) vs Graph(GraphQL)

graphql-voyager[8]

alt
  • 强类型(每一个GraphQL的请求发到服务端之后,服务端都会进行校验,不通过会报错)

Migrating from REST to GraphQL[9]

alt

参考:

为什么GraphQL比REST好用?[10]

参考资料

[1]

REST: https://docs.github.com/en/rest

[2]

创建一个仓库: https://docs.github.com/en/rest/reference/repos#create-a-repository-for-the-authenticated-user

[3]

GET: https://docs.github.com/en/rest/reference/repos#get-a-repository

[4]

PATCH: https://docs.github.com/en/rest/reference/repos#update-a-repository

[5]

DELETE: https://docs.github.com/en/rest/reference/repos#delete-a-repository

[6]

Exploer: https://docs.github.com/en/graphql/overview/explorer

[7]

n+1问题: https://segmentfault.com/a/1190000039421843

[8]

graphql-voyager: https://apis.guru/graphql-voyager/

[9]

Migrating from REST to GraphQL: https://docs.github.com/en/graphql/guides/migrating-from-rest-to-graphql

[10]

为什么GraphQL比REST好用?: https://www.bilibili.com/video/BV1f4411A7qA

本文由 mdnice 多平台发布

更多推荐

软件设计师笔记系列(二)

😀前言在计算机科学的世界里,程序设计语言是一个核心组成部分,它不仅仅是计算机和程序员之间的交流桥梁,更是实现各种软件和应用的基石。理解程序设计语言的基本概念和原理是每一个aspiring程序员和计算机科学学生的必修课程。.在本章中,我们将深入探讨程序设计语言的基本概念,包括解释器和编译器的工作原理,函数的定义和调用方

使用凌鲨管理本地仓库

GIT是一种分布式版本控制系统,它允许开发人员在不依赖于中央服务器的情况下进行代码管理和协作。GIT在处理大型项目和复杂的版本历史方面表现出色,提供了强大的分支和合并功能,使得开发团队可以更高效地进行软件开发和代码维护。管理本地GIT仓库添加本地仓库设置远程仓库令牌设置远程仓库令牌可以方便的查看工单等数据。目前我们支持

嵌入式Linux驱动开发(I2C专题)(三)

无需编写驱动直接访问设备_I2C-Tools介绍参考资料:Linux驱动程序:drivers/i2c/i2c-dev.cI2C-Tools-4.2:https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/AP3216C:gitclonehttps://e

Linux学习第12天:基于API函数的字符设备驱动开发:一字一符总见情

本节学习的内容主要为基于LinuxAPI函数的字符设备驱动的开发,还包括在驱动模块加载的时候如何自动创建设备节点。总结的脑图如下:一、驱动原理1.分配和释放设备号申请设备号函数:intalloc_chrdev_region(dev_t*dev,unsignedbaseminor,unsignedcount,constc

解决hadoop使用put上传报错问题

hadoop使用put上传报错WARNhdfs.DataStreamer:DataStreamerExceptionorg.apache.hadoop.ipc.RemoteException(java.io.IOException):File/input/yxqzdata.COPYINGcouldonlyberepli

数据解析之Xpath解析(超详细定位)

目录​编辑前言一.Xpath介绍1.基本介绍2.HTML树状结构图2.节点之间的关系Xpath中的绝对路径与相对路径绝对路径相对路径二.Xpath的语法介绍基本定位语法1.元素属性定位2.层级属性结合定位3.使用谓语定位4.使用逻辑运算符定位5.使用文本定位6.使用部分函数定位三.Xpath语法验证在开发者工具的Ele

用一个RecyclerView实现二级评论

先上个效果图(没有UI,将就看吧),写代码的整个过程花了4个小时左右,相比当初自己开发需求已经快了很多了哈。给产品估个两天时间,摸一天半的鱼不过分吧(手动斜眼)需求拆分这种大家常用的评论功能其实也就没啥好拆分的了,简单列一下:默认展示一级评论和二级评论中的热评,可以上拉加载更多。二级评论超过两条时,可以点击展开加载更多

golang:context

context作用goroutine的退出机制多个goroutine都是平行的被调度的,多个goroutine如何协调工作涉及通信、同步、通知和退出通信:goroutine之间的通信同步chan通道同步:不带缓冲的chan提供了一个天然的同步等待机制。通过WaitGroup也可以为多个goroutine提供同步等待机制

数据库索引

一.索引的引用索引类似于一本书的目录,可以根据页码更快的查找到内容。索引可以加快访问数据库的速度二.索引的分类1.按表的列属性分类(1).普通索引:最基本的索引,没有任何限制;(2).唯一索引:索引列的值必须唯一,允许有空值。如果是组合索引,则列值的组合必须唯一;(3).主键索引:是一种特殊的唯一索引,一个表只能有一个

Golang代码漏洞扫描工具介绍——govulncheck

GolangGolang作为一款近年来最火热的服务端语言之一,深受广大程序员的喜爱,笔者最近也在用,特别是高并发的场景下,golang易用性的优势十分明显,但笔者这次想要介绍的并不是golang本身,而且golang代码的漏洞扫描工具,毕竟作为服务端的程序,安全性一直是一个不同忽视的地方Go安全团队在2022.09.0

基于Qt实现的可视化大屏监控

基于Qt实现的可视化大屏监控先上图基于Qt实现的可视化大屏监控总有人质疑QWidget实现不了炫酷的界面,其实QWidget已经很强大了,虽然很多效果没有现成的框架,所以比不上html5或者安卓这种,但是也能实现很多不错的效果了,而且在嵌入式设备上一样能达到这种效果,这是其他很多框架所不能实现的。本次大屏监控主要使用以

热文推荐