小试GraphQL

news2024/11/27 22:28:27

之前做的需求,基本都是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 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1028677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

〔023〕Stable Diffusion 之 界面主题 篇

✨ 目录 🎈 系统内置主题🎈 kitchen Theme 主题🎈 Catppuccin Theme 主题🎈 Cozy Nest 主题🎈 系统内置主题 可以通过命令行修改主题,在 webui-user.bat 文件中 set COMMANDLINE_ARGS 参数后面添加 --theme dark 来设置深色主题当然,系统设置里面也自带了很多的主题…

VS2015 设置工程目录不保存 .sdf或.db 文件、 Ipch 文件夹

VS2015 设置工程目录不保存 .sdf或.db 文件、 Ipch 文件夹 sdf或db文件、Ipch文件夹均较大,编译几次就可以达到几十兆。 为了便于工程保持,可以设置这些文件保存于工程之外,但又不影响工程的正常运行。 (PS:这些文件不…

家族小程序开发方案

家族小程序的开发需要考虑到家族成员之间的沟通和互动需求,以及家族文化传承和传承方式等因素。以下是一些开发家族小程序时需要考虑的方面: 家族文化传承:家族小程序需要考虑到家族文化传承的需求,包括家族历史、家族文化、家…

C++真的是 C加加

📝个人主页:夏目浅石. 📌博客专栏:C的故事 🏠学习社区:夏目友人帐. 文章目录 前言Ⅰ. 函数重载0x00 重载规则0x01 函数重载的原理名字修饰 Ⅱ. 引用0x00 引用的概念0x01 引用和指针区分0x03 引用的本质0x04…

【lesson8】冯诺依曼体系的介绍

文章目录 冯诺依曼体系是什么?为什么要有存储器?怎么实现数据传输的? 冯诺依曼体系是什么? 冯诺依曼体系是一种计算机体系结构,是现代计算机的基础被广泛应用。 如图所示: 输入设备:键盘&…

企业直播如何实现多画面多场景切换?

企业直播如何实现多画面多场景切换? 应用场景 主要应用于:企业的会议直播、小型会务直播、异地讲师培训授课,实现较低成本的导播台场景切换效果(阿酷TONY注,比不上硬件导播台,但整体还可以,能…

快手商品详情数据API接口【关键词搜索商品列表数据】APP端商品详情数据

快手商品API接口是快手电商平台为开发者提供的一组接口,允许开发者通过程序代码访问快手电商平台的商品数据,实现商品信息的获取等操作。以下是快手商品API接口的一些常用功能: 获取商品列表:通过该接口可以获取店铺或分类下的商…

安科瑞电流隔离传感器 BA穿孔交流电流变送器-安科瑞黄安南

一.产品原理和功能介绍 BA系列产品应用电磁感应原理,对电网中的交流电流进行实时测量,采用精密恒流技术和线性温度补偿技术,将其隔离变换为标准的直流信号输出 采用24伏或12伏安全电压供电,具有过载能力强、高精度、高隔离、高安…

Linux 手动卸载jdk

Linux 手动卸载jdk 1、先输入java -version 查看是否安装了jdk java -version2、如果安装了,检查下安装的路径 which java(查看JDK的安装路径) which java3、卸载 rm -rf JDK地址(卸载JDK) rm -rf /home/koneom/ja…

为什么现在的LLM都是Decoder only的架构?

LLM 是 “Large Language Model” 的简写,目前一般指百亿参数以上的语言模型, 主要面向文本生成任务。跟小尺度模型(10亿或以内量级)的“百花齐放”不同,目前LLM的一个现状是Decoder-only架构的研究居多,像…

RobotFrameWork环境搭建及使用

RF环境搭建 首先安装python并且配置python环境变量pip install robotframeworkpip install robotframework-ride 生产桌面快捷方式 不行换豆瓣源检查一下pip list RF类库和扩展库 标准库 按F5快捷键查询,可以看到rf自带的库不需要额外安装这些标准库在python的 …

ai智能写作软件哪个好-AI智能写作软件的类型标准

AI智能写作软件能做什么? 节省时间:手动撰写文章和内容可能会非常耗时,而AI智能写作软件可以帮助我们快速生成文字,节省大量时间和精力。 增加生产力:对于内容创作者、营销人员和企业来说,高效地生成文章…

【独家】电视盒子哪个牌子最好?老烧力荐目前性能最强的电视盒子

电视盒子是电视机的最佳拍档,仅需几百元就能让电视机升级换代,身边朋友在挑选电视盒子时不知道电视盒子哪个牌子最好会咨询我的意见,下面我将介绍发烧友们最爱的目前性能最强的电视盒子,如果你近期也想购入电视盒子,记…

sourcetree 配置 gitlab ssh及公钥私钥设置

参考链接:Mac sourcetree 配置 ssh 密钥 - 简书 1.打开sourcetree --新建--从URL克隆,复制你项目的ssh 链接添加进去,如果没有配置就会提示: 这是一个无效的源路径/URL 2.打开sourcetree的设置 3.账户--添加 4.如图输入&#xf…

poi判断excel单元格内容是否为日期

通过cell.getCellType()拿到单元格的数据类型,CellType是一个枚举类型详情如下,能够看到并没有日期类型的code,poi读取到的日期类型的单元格时会认为是NUMERIC类型,然后,poi提供了HSSFDateUtil.isCellDateFormatted(ce…

SEO方案尝试--Nuxtjs项目基础配置

Nuxtjs 最新版 Nuxt3 项目配置 安装nuxtjs 最新版 Nuxt3 参考官网安装安装插件安装ElementPlus页面怎么跳转,路由怎么实现 安装nuxtjs 最新版 Nuxt3 参考官网安装 安装插件 安装ElementPlus 安装 Element Plus 和图标库 # 首先,使用以下命令安装 Eleme…

运用贪心算法实现卡牌游戏-2023年全国青少年信息素养大赛Python复赛真题精选

[导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛真题系列的第18讲。 全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设…

Leetcode 01-算法入门与数组-③数组排序

LeetCode 01-算法入门与数组-③数组排序 一. 冒泡排序 1. 冒泡排序算法思想 冒泡排序(Bubble Sort)基本思想: 经过多次迭代,通过相邻元素之间的比较与交换,使值较小的元素逐步从后面移到前面,值较大的元素…

Spring MVC常见面试题

Spring MVC简介 Spring MVC框架是以请求为驱动,围绕Servlet设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图。简单来说,Spring MVC整合了前端请求的处理及响应。 Servlet 是运行在 Web 服务器或应用…

玩转Nginx

Nginx是什么 Nginx(engine x)是一款的Web服务器、反向代理服务器,能够实现前端Web应用的部署、请求反向代理及负载均衡处理等功能。 特点 轻量,占用内存少高可靠高并发、高性能可扩展性好支持热部署BSD许可证(开源、可修改再发…