为什么 GraphQL 是构建微服务的更好选择

告别蓝牙音质妥协:用ESP32和PCM5102搭建WiFi无损音频播放器(附完整代码) 本文详细介绍了如何利用ESP32微控制器和PCM5102 DAC芯片构建一套完整的WiFi无损音频流媒体系统,彻底摆脱蓝牙协议的音质束缚。从硬件原理到软件实现,包括核心器件选型、电路设计、I2S音频驱动实现以及系统优化方案,帮助音频发烧友实现高保真无线音频传输。 阅读详情

关于使用REST还是GraphQL来构建微服务哪个更好,一直存在争论。这两种技术都有其支持者和批评者,但当涉及微服务架构的特定需求时,GraphQL 成为明显的领先者。原因如下。

了解 RESTful 的关注点

虽然 REST 多年来一直是首选 API 风格,因其简单性和普遍适用性而受到赞誉,但它的局限性在微服务环境中变得非常明显。这些限制包括:

  • 过度获取数据
  • 对相关数据的多个 HTTP 请求
  • 复杂的版本控制策略

此类问题可能会阻碍微服务架构的性能和可扩展性。

过度获取数据: REST API 旨在返回一组固定的数据,这通常会导致过度获取。这种冗余在移动网络中尤其成问题,其中每个额外的数据字节都可能导致应用程序变慢并降低用户体验。

例如,假设我们有一个 REST API 端点/api/user/{userId},它为用户返回以下数据:

在移动应用程序仅需要特定用户详细信息(例如姓名和电子邮件)来进行个人资料概述的情况下,获取全面的用户数据意味着过度获取。

对于数据计划有限的用户来说,过多的数据使用可能会带来高昂的成本,并导致应用程序性能变慢和用户体验下降。

延迟和 N+1 问题:微服务通常需要将数据分布在多个服务中。

假设您有一个电子商务应用程序,其中订单域处理产品、客户、订单和退货实体,库存域管理产品、库存、仓库和交货实体。常见的操作可能是显示订单详细信息以及每种产品的当前库存状态。

假设我们有一个订单微服务和一个股票微服务来处理订单和股票。

在我们的场景中,客户下了三个订单 (N=3),每个订单包含四种不同的产品。为了显示订单详细信息以及每种产品的库存状态,应用程序首先发出一个获取订单的请求。然后,对于每个订单中的每个产品,它向库存微服务发出额外的请求以检索库存信息。这会产生一个初始请求,加上 12 个后续请求(三个订单乘以每个订单四个产品),总共 13 个 API 调用。由于多次往返时间 (RTT) 以及网络和服务器负载的增加,请求的成倍增加会导致更高的延迟,体现了 N+1 问题。

版本控制挑战:随着时间的推移维护 REST API 涉及复杂的版本控制策略,例如引入新端点或在 API 路径中嵌入版本号。这可能会导致臃肿和混乱,使 API 开发和使用变得复杂。

GraphQL 的优势

GraphQL解决了许多 REST 弱点。

领域驱动设计:微服务依靠领域驱动设计蓬勃发展,其中每项服务都是围绕特定业务功能构建的。 GraphQL 以模式为中心的方法与此完美契合,为微服务提供了更有组织、更连贯的结构。

统一模式:在微服务架构中,每个服务可能都有自己的模式,代表业务领域的一部分。 GraphQL 的突出之处在于允许将这些模式组合或缝合在一起,为客户端提供统一的界面。这意味着客户端可以在单个请求中从多个服务查询数据,从而大大降低网络调用的复杂性和数量。

解决N+1问题: GraphQL能够通过单个请求获取数据,无论需要调用多少个底层服务,直接解决了REST架构固有的N+1问题。这不仅提高了性能,还简化了客户端数据获取逻辑。

对于前面描述的N+1问题,如果服务支持GraphQL,则可以使用它在单个查询中获取嵌套数据,有效解决N+1问题。

效率和性能:通过允许客户端准确指定他们需要的数据,GraphQL 消除了 REST API 中常见的过度获取和获取不足的问题。这将带来更高效的数据检索、更少的带宽使用以及更快的应用程序,在移动环境中尤其明显。

在早期的场景中,移动应用程序仅需要特定的用户详细信息(例如姓名和电子邮件)来进行个人资料概述,客户可以仅请求姓名和电子邮件。

简化版本控制:与 REST 不同,GraphQL 允许将新字段和类型添加到架构中而不影响现有查询,从而减少了版本控制的需求。这种向前兼容性意味着客户端和服务器可以随着时间的推移更加平滑地发展。如今,GraphQL 已成为一项成熟的技术,可满足传统 REST API 无法完全满足的现代 Web 开发中的特定需求。其设计提高了效率、灵活性和开发人员的生产力。

展望未来,GraphQL 的未来是光明的,社区驱动的努力专注于解决其当前的局限性,特别是在安全性、性能和标准化方面。随着这些努力取得成果,GraphQL 的采用范围预计将扩大,巩固其作为 API 领域关键技术的地位。

[PCIE5.0] 4.2.3.2 Encoding of Presets • 发射器预设:发射器预设值用4位二进制编码,表示不同的预设设置(P0 到 P10),这些设置定义了信号的传输特性。• 接收器预设提示:接收器预设提示是通过3位二进制编码告诉接收器建议的增益值,用于调整接收器的灵敏度(适用于8.0 GT/s数据速率)。 阅读详情

相关推荐

vue3接入大华摄像头

┃ ┃ ┣ 📜PlaybackModal.vue 回放列表模态框。┃ ┃ ┗ 📜VideoGrid.vue 视频播放区域。┃ ┃ ┣ 📜ControlPanel.vue 控制面板。┃ ┃ ┣ 📜DeviceList.vue 设备列表。┃ ┣ 📂module //大华摄像头文件。

💻 专注 Vue 前端与 Java 后端技术 🌱 目前正在深入 Spring Boot、微服务与性能优化 📝 定期分享实战踩坑经验与学习笔记 🤝 欢迎交流,共同进步 915

GraphQL vs REST:为什么你应该选择GraphQL进行API开发

在当今的API开发领域,GraphQL正迅速成为REST API的有力替代者。如果你正在寻找一种更高效、更灵活的数据查询方式,那么学习GraphQL将为你带来巨大的开发优势。这个开源学习项目提供了完整的GraphQL教程和实践指南,帮助你快速掌握这一现代API技术。 ## 🔥 GraphQL是什么?为什么它如此重要? GraphQL是一种用于API的查询语言,由Facebook于2015年开

gitblog_00451的博客 562

Vue3 - 完美解决html2canvas截图不全问题,截图只截取当前可视区域导出图片不全,截屏导出的图片显示不全只有一部分或缺一块,vue3移动端H5网页项目使用html2canvas插件长截图!

vue3,html2canvas,移动端H5网页,截图不全,html2canvas长截图不全,保存长截图,页面滚动导致截图不全,网页下方截屏不到怎么办,底部一部分无法截屏到,保存的图片少了一大块,H5海报截图不完整,怎么截取滚动条下方的内容,截图图时图片不全,截图图片只有一半的问题,底部内容空白,截图空白问题的解决,截图不全怎么办,html2canvas.js网页截图功能(解决截图不全问题,移动端ios系统截图不完整,html2canvas截图太长又不能删减截取不到,使用HTML2Canvas在H5页面上实

🏆 前端领域优质创作者 1万+

GraphQL and Microservices: A Seamless Integration

1.背景介绍 GraphQL 和微服务:无缝集成 背景介绍 随着互联网和数字技术的发展,数据的规模和复杂性不断增加。为了更好地处理这些数据,人工智能科学家、计算机科学家和软件系统架构师需要寻找更有效的方法来处理和分析这些数据。在这种背景下,GraphQL 和微服务技术成为了关键技术之一。 GraphQL 是 Facebook 开发的一种基于 HTTP 的查询语言,它允许客户端以声明式的方式...

AI天才研究院 822

OpenClaw实战五|企业文档AI助理:对接内部知识库+自动答疑+文档生成,员工自助查资料零等待

企业最大的隐性成本,不是设备、不是房租,而是内部知识的混乱与流失。OpenClaw企业文档AI助理,本质是给企业做了一个7×24小时在线、永不疲倦、精准无误、自动更新的内部知识管家。它不替代HR、行政、IT,而是把他们从无穷无尽的重复问答、机械文档编写里解放出来,去做更有价值的管理、服务、优化工作。对中小企业来说,不用买昂贵的知识库系统、不用招开发、不用做复杂集成,一台私有化服务器,两天就能落地,性价比拉满。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 148

工程师必读一次性讲明白系列(十三)眼图、阻抗匹配、信号一致性、射频匹配、电磁感应

概念主要作用影响因素解决方法眼图评估信号质量,显示失真和噪声噪声、信号失真、时序抖动改善信号源、使用低噪声组件阻抗匹配避免信号反射,提高传输效率阻抗不匹配、传输线路特性使用匹配电路、适配器信号一致性保证信号稳定准确传输传输线路、噪声干扰使用屏蔽、滤波器,选择合适线路射频匹配确保射频信号高效传输天线设计、阻抗不匹配使用射频匹配器、调整天线设计电磁感应防止电磁干扰对信号的影响设备之间的电磁干扰(EMI)屏蔽、接地、滤波器。

weixin_43199439的博客 160

Juniper与Axum集成实战:构建高性能GraphQL微服务

在当今微服务架构盛行的时代,GraphQL凭借其灵活的数据查询能力和类型安全特性,正成为API设计的首选方案。Juniper作为Rust生态中功能最完善的GraphQL服务器库,与Axum这一现代化Web框架的完美结合,为开发者提供了构建高性能微服务的终极解决方案。 ## 为什么选择Juniper + Axum组合? Juniper是Rust语言中功能最强大的GraphQL实现,提供了完整的类

gitblog_00588的博客 1104

小梅哥Xilinx ZYNQ学习笔记2——38译码器

译码器(Decoder)是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。译码器一般分为通用译码器和数字显示译码器两大类。本设计的是通用译码器。三八译码器,即是 3 种输入状态翻译成 8 种输出状态。1.case开始开始,endcase结束;2.数字声明时,合法的基数格式有 4 中,包括:十进制('d 或 'D),十六进制('h 或 'H),二进制('b 或 'B),八进制('o 或 'O)。数值可指明位宽,也可不指明位宽。

m0_51430584的博客 1636

GraphQL 在微服务架构中的实践

从刚开始使用 GraphQL 到现在已经过去了将近半年的时间,在微服务中实践 GraphQL 的过程中,我们发现了微服务与 GraphQL 之间设计思路冲突的地方,也就是去中心化与中心化。

程序员高级码农的博客 1263

YOLOv11改进缝合注意力 | 深度优化的BiFormer模型-结合BiLevel Routing Attention与深度可分离卷积的创新应用(附代码)

YOLO(You Only Look Once)系列目标检测算法一直以来都是计算机视觉领域的热门选择。随着YOLOv11的发布,它在许多实际应用场景中取得了显著的性能提升。然而,面对日益复杂的目标检测任务,单纯依赖卷积神经网络(CNN)在某些情况下已经显得力不从心,特别是在处理小尺度、密集目标以及遮挡目标时,卷积操作的局部性限制了模型的表达能力。

一键难忘的博客 720

3D Slicer学习记录(4)-PLUSapp连接双目相机Intel Realsense

plusapp是基于openIGTLink协议的免费的开源库和应用程序API接口,用于数据采集、预处理、校准和实时流成像、位置跟踪和其他传感器数据。这里以intel realsense双目相机为例详细的演示整个图像流导入到3D Slicer的流程。

weixin_39090239的博客 1346

为什么说graphql是一个不错的选择

由于之前弄过一段时间graphql,但是也仅仅是处于会用的状态,对于一些它优势,或者说为什么要用这个东西,还是有些有些不太明白,最近在看Dgraph的时候,突然明白了许多。 首先什么样的公司会使用这个东西? 1.公司的项目有移动端,web端等多个端口,有接口可以共用。 2.并非类似,做完就拿钱走人就ok,还需要进行日后的优化和调整,并且在慢慢的转向微服务。REST API 暴增,业务逻辑越来越复杂...

水镜先生的博客 330

玩转Docker小游戏项目系列: Docker部署红心纸牌网页小游戏

玩转Docker小游戏项目系列: Docker部署红心纸牌网页小游戏

jks212454的博客 422

微服务下使用GraphQL构建BFF

https://zhuanlan.zhihu.com/p/35108457微服务架构,这个在几年前还算比较前卫的技术在如今遍地开花。得益于开源社区的支持,我们可以轻松地利用 Spring Cloud 以及 Docker 容器化快速搭建一个微服务架构的原型。不管是成熟的互联网公司、创业公司还是个人开发者,对于微服务架构的接纳程度都相当高,微服务架构的广泛应用也自然促进了技术本身更好的发展以及更多的实...

z69183787的专栏 5592

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

我为什么要放弃RESTful,选择拥抱GraphQL

点击上方蓝色“方志朋”,选择“设为星标”回复“666”获取独家整理的学习资料!转自:师兄睿谈链接:toutiao.com/a6833818331884028419背景REST作为一种现代网...

方志朋的博客 136

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

GraphQL与REST API对比:为什么开发者都在选择GraphQL

在当今的API开发领域,GraphQL正在迅速崛起成为主流技术。与传统的REST API相比,GraphQL提供了更灵活、更高效的查询方式,让开发者能够更精准地获取所需数据。🚀 ## 什么是GraphQL?简单理解 GraphQL是一种用于API的查询语言,由Facebook在2012年开发并于2015年开源。它的核心优势在于**一次请求获取所需数据**,避免了REST API常见的"过度获

gitblog_01099的博客 770

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

我为什么要放弃 RESTful,选择拥抱 GraphQL

来源:师兄睿谈链接:toutiao.com/a6833818331884028419背景REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的...

涛哥聊Python 456

为什么要放弃 RESTful,选择拥抱 GraphQL

背景 REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。 REST 的 API 配合JSON格式的数据交换,使得前后端分离、数据交互变得非常容易,而且也已经成为了目前Web领域最受欢迎的软件架构设计模式。 但随着REST API的流行和发展,它的缺点也暴露了出来: 滥用REST接口,导致大量相似度很高(具有重复性)的API...

qq_39871711的博客 180

为什么说 GraphQL 可以取代 REST API?

几年前,我在 DocuSign 带领了一个开发团队,任务是重写一个有数千万个用户在使用的 Web 应用程序。当时还没有可以支持前端的 API,因为从一开始,Web 应用程序就是一个.NET 大单体。西雅图的 API 团队在将拆分单体,并逐步暴露出 RESTful API。这个 API 团队由两名工程师组成,发布周期为一个月,而我们在旧金山的前端团队每周都会发布新版本。 API 团队的发布周期...

hellozhxy的博客 1781

我为什么要放弃RESTful,选择拥抱GraphQL?

背景REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大...

Java和Android架构 287

Graphene-JS:构建GraphQL模式的强大工具

Graphene-JS:构建GraphQL模式的强大工具 项目介绍 Graphene-JS 是一个专为快速轻松构建GraphQL模式和类型而设计的JavaScript框架。无论你是初学者还是经验丰富的开发者,Graphene-JS都能帮助你轻松地将GraphQL集成到你的JavaScript项目中。 项目技术分析 Graphene-JS的核心优势在于其简洁易用的API设计和强大的功能集成。它不仅支...

gitblog_00420的博客 926

graphql-go-tools架构深度剖析:为什么它是Go语言中最高效的GraphQL路由器

在当今微服务架构盛行的时代,GraphQL作为一种强大的API查询语言,正迅速成为现代应用开发的首选。然而,随着GraphQL生态系统的快速发展,如何构建高性能、可扩展的GraphQL路由器成为了开发者面临的重要挑战。graphql-go-tools作为一款专注于**GraphQL路由器**和**API网关**的Go语言框架,以其卓越的性能表现和创新的架构设计,正在重新定义GraphQL网关的性能

gitblog_00083的博客 650

为什么说GraphQL可以取代REST API?

几年前,我在DocuSign带领了一个开发团队,任务是重写一个有数千万个用户在使用的Web应用程序。当时还没有可以支持前端的API,因为从一开始,Web应用程序就是一个.NET大单体。西雅图的API团队在将拆分单体,并逐步暴露出RESTful API。这个API团队由两名工程师组成,发布周期为一个月,而我们在旧金山的前端团队每周都会发布新版本。API团队的发布周期太长,因为很多(几乎所有)功能都必...

weixin_33705053的博客 120

Shopify GraphQL设计教程:构建高效API的指南

[Shopify](https://www.shopify.com) GraphQL设计教程是一个由Shopify团队创建并公开的教程,旨在帮助开发者理解和设计高效的GraphQL API。该教程基于Shopify在生产环境中近三年的实践经验,涵盖了从基础概念到高级设计原则的全面内容。无论你是GraphQL的新手还是经验丰富的开发者,这个教程都能为你提供宝贵的指导和灵感。 ## 项目技术分析 ...

gitblog_01064的博客 533

GraphQL Java 与 GraphQL Federation:构建联邦式 GraphQL 架构的终极指南

GraphQL Java 是 GraphQL 规范的 Java 实现,它为构建现代 API 提供了强大的基础。GraphQL Federation 是构建分布式 GraphQL 架构的先进方法,允许团队独立开发和部署服务,同时提供一个统一的 API 网关。本文将带你深入理解如何在 GraphQL Java 项目中实现 GraphQL Federation 架构,让你能够构建可扩展、高性能的微服务系

gitblog_01361的博客 702

GraphQL vs REST API 设计实测:灵活查询与性能权衡逐项对比

REST 接口返回无用字段浪费带宽,GraphQL 又易引发 N+1 查询拖慢数据库。本文对比两者底层执行机制,给出 DataLoader 批处理方案与 REST 字段过滤策略。帮你根据业务场景做出真实性能权衡,拒绝盲目跟风。

H19905222的博客 254
上一篇: 通过自动化部署消除人为操作:不断提高提交部署比率
下一篇: 从理论到实践:通过经过验证的最佳实践解锁 DevSecOps 卓越性
优维科技EasyOps
博客等级 码龄5年 1483粉丝 395原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值