API 接口选择那个?RESTful、GraphQL、gRPC、WebSocket、Webhook

news2024/12/25 0:38:42

大家好,我是比特桃。目前我们的生活紧紧地被大量互联网服务所包围,互联网上每天都有数百亿次API调用。API 是两个设备相互通讯的一种方式,人们在手机上每次指尖的悦动,背后都是 API 接口的调用。
在这里插入图片描述
本文将列举常见的一些 API 接口,并阐述它们之间的优缺点及关系。

目录

  • 一、API 类型
    • 1.1 SOAP
    • 1.2 RESTful
    • 1.3 gRPC
    • 1.4 GraphQL
    • 1.5 WebSocket
    • 1.6 Webhook
  • 二、RESTful 详解
  • 三、GraphQL 详解
  • 四、gRPC 详解
  • 五、API 优化
  • 六、总结

一、API 类型

常用的 API 类型有很多,但本文聚焦于 HTTP 之上的 API 接口(通用性)。像 TCP 传输层之上的其他应用层协议,如 MQTT 之类的,不在本文的讨论范围。
在这里插入图片描述

1.1 SOAP

SOAP 协议基于XML,应用于安全性和可靠性至关重要的金融服务和支付网关,比较适合对数据安全等级较高的场景。
在这里插入图片描述

1.2 RESTful

基于JSON的轻量级 web 服务,也是目前应用最广泛的 API 协议。
在这里插入图片描述

1.3 gRPC

高性能微服务通讯协议,它是微服务架构最爱。
在这里插入图片描述

1.4 GraphQL

一种客户端可动态定制化的 API 协议,它不仅仅是一种API通讯方式,还是一种查询语言。
在这里插入图片描述

1.5 WebSocket

WebSocket 是实时通讯的常用手段,基于HTTP协议。关于实时、双向和持久连接的。如果只需要服务器实时推送,也可以尝试同样基于 HTTP 的 SSE(Server-sent events)。
在这里插入图片描述

1.6 Webhook

自定义远程回调函数,通常用于自动化处理。我们在使用自动化部署 Jenkins 的时候有用到过:十分钟搞定Jenkins+Gitlab+Docker前后端部署
在这里插入图片描述
下面我们将详细介绍三个最常用的 API 接口:RESTful、GraphQL、gRPC。

二、RESTful 详解

RESTful API在移动互联网时代中有着广泛的应用,因为它足够的轻量(基于JSON),非常灵活。
在这里插入图片描述
REST API规定了许多标准,比如:统一接口、通讯方式、无状态、可缓存等。遵循 REST API 标准的 API 称为 Restful API,为了保障 API 接口的可维护性,一般开头会有 v1/v2/v3 这种类似的版本号。
在这里插入图片描述
需要注意的是,URL的资源是按名词来命名,而不是动词,比如你可以命名:

https://example.com/api/v3/products

而不是:

https://example.com/api/v3/getALLproducts

这也是很多不规范的“RESTful API”最容易犯错的地方,REST API 规定,动作是用 URI 进行的。
在这里插入图片描述
HTTP请求头的类型所对应的动作如下表所示,也是我们常说的:CRUD 增删改查:

类型动作
POSTCREATE
GETREAD
PUTUPDATE
DELETEDELETE

HTTP 常见的返回码对应的含义如下表所示:

数值结果
200成功
400请求错误
500后台错误

此外,还要注意 API 接口的幂等性问题。只有在进行 POST 创建操作的时候是不具备幂等性的,我们要注意客户端的多次请求,所导致的数据重复问题。

三、GraphQL 详解

Meta 公司开发的接口协议,目前 Github、Shopify、Ins 等均在使用。最大的特点就是灵活性和高效率,对于其产品有复杂数据要求的,提供了很好的选择方案。GraphQL 和我们刚刚说的 RESTful API 有很多相似之处,比如它们都是基于http、均通过 URL 进行统一资源定位、数据传输采用 JSON 格式。但GraphQL 独有的优势在于,客户端可定制化的选择接口返回的内容,这极大的提高了程序的动态扩展能力。
在这里插入图片描述
如果我们一个动作需要多个数据的组合,那在 RESTful API 中,可能面临多个请求。但在GraphQL中可以在请求头中进行数据定制,GraphQL 将组织好数据进行返回。
在这里插入图片描述
但它也有一定缺陷,一方面是不易进行缓存。GraphQL具有单一入口点,并且默认使用 HTTP POST,会妨碍 HTTP 缓存的充分利用。另一方面是因为可以随意自定义数据,这会可能会产生一些危险。

四、gRPC 详解

RPC 大家应该不算陌生,Remote Procedure Call 远程过程调用。也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的方法。由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

gRPC 是Google 2016年创建的开源远程过程调用框架,它重写了他们过年的内部RPC基础设施并开源出来。gRPC 是 RPC 的一种流行实现,许多组织已采用 gPRC 作为首选的 RPC 实现方案。还有Openfeign、Dubbo这种框架也可以作为 RPC 的实现方案。
gRPC生态系统的核心是使用 Protocal Buffers (协议缓冲区)作为其数据交换格式。它是一种和语言及平台无关的机制,用于编码结构化数据。
在这里插入图片描述
gRPC 使用 Protocal Buffers 进行编码并通过线路发送数据。虽然gRPC也可以通过 JSON,但Protocal Buffers 提供了多种优势,使其成为 gRPC 的首选编码格式。通过定义通讯协议 proto 文件,来让微服务之间进行通讯,写好 proto 后可以通过工具自动生成不同语言的实现:
在这里插入图片描述
之所以 gRPC 具有超高的性能,Protocol Buffers 的通讯方案是重点。它是一种非常高效的二进制编码格式,比 JSON 快得多。
在这里插入图片描述
另一个高效率的原因是,gRPC 构建在HTTP/2 之上,以提供大规模的高性能基础。gRPC使用 HTTP/2 Stream,它允许通过单个长期的TCP连接发送多个消息流。HTTP/2 的好处有:多路复用、流优先、二进制协议、服务推送。当然,Openfeign也可以通过配置使用 HTTP/2。
在这里插入图片描述
gRPC由于二进制编码和网络优化,效率很高,比JSON快5倍。下图为 gRPC 通讯的过程:
在这里插入图片描述
说了这么多 gRPC 的好处,那为什么服务端在与客户端通讯的时候没采用 gRPC 协议呢?这是因为gRPC依赖于对HTTP/2原生较低级别的访问,目前没有浏览器支持 gRPC 客户端所需的网络请求控制级别。
不过目前可以在代理的帮助下从浏览器进行 gRPC 调用。这项技术被称为 gRPC-Web。但是该功能集并不能与 gRPC 完全兼容。但在移动端其实有在使用,在电量和带宽受限的环境中非常有意义。
在这里插入图片描述

五、API 优化

  • 使用缓存,可以采用类似 Redis 这种工具,将数据进行缓存以提供高效率的通讯。
  • 连接池,使用多路复用技术,用来减少对数据库的访问。
  • 避免 N+1 查询,当一个接口需要采用多个 SQL 语句的时候,尝试组合使用一个。
  • 使用分页,减少数据通讯的代价,换取更快的加载速度。
  • 采用 JSON,轻量级的 JSON 通讯可以在服务端与客户端中保持平衡。
  • 压缩,可以用 Brotli 算法对数据进行压缩,许多CDN(内容分发网络)也可以支持压缩。
  • 异步日志记录,当高并发的时候,这类工作可以分发到别的微服务中进行。

六、总结

本文我们了解了基于 HTTP 应用层协议之上的,常用六种 API 接口:RESTful、GraphQL、gRPC、WebSocket、Webhook。每一个都具有自己鲜明的特色及应用场景,我们应该根据产品以及团队的具体情况才选择使用。没有最好的 API 接口,只有最适合的场景及应用。

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

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

相关文章

阿拉伯国家-中国经贸合作创新中心揭牌仪式在阿联酋迪拜举行

当地时间8月16日,阿拉伯国家-中国经贸合作创新中心揭牌仪式在迪拜举行。中心的成立将为 “一带一路”中国与沿线各国提供科技交流和经贸合作的高质量平台。中国国际科技促进会军民科技产业委员会主任林志东代表中国国际科技促进会宣读了阿拉伯国家-中国经贸合作创新…

Redis 整合中 Redisson 的使用

大家好 , 我是苏麟 , 今天带来 Redisson 使用 . 官方文档 : GitHub - redisson/redisson: Redisson - Easy Redis Java client with features of In-Memory Data Grid. Sync/Async/RxJava/Reactive API. Over 50 Redis based Java objects and services: Set, Multimap, Sorte…

DC电源模块关于高效率的特点

DC电源模块关于高效率的特点 DC电源模块是目前应用广泛的电源系统之一,它的高效率是其最为显著地特点之一。本文将从以下三个方面进行介绍:什么是DC电源模块、DC电源模块的工作原理以及DC电源模块的高效率特点。 一、什么是DC电源模块 DC电源模块是一种…

使用 KubeBlocks 为 K8s 提供稳如老狗的数据库服务

原文链接:https://forum.laf.run/d/994 大家好!今天这篇文章主要向大家介绍 Sealos 的数据库服务。在 Sealos 上数据库后端服务由 KubeBlocks 提供,为用户的数据库应用保驾护航。无论你是在公有云还是本地环境中使用,Sealos 都能为…

基于JavaEE的ssm公司员工信息管理系统的设计与实现

基于JavaEE的ssm公司员工信息管理系统的设计与实现043 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存…

这么深入浅出理解k8s集群控制器,能行!

1、控制器,是k8s集群的“大脑” 控制器本身对我们来说并不陌生的。我们每天使用的洗衣机、冰箱、空调等,都是依靠控制器才能正常工作 K8S集群的核心组件逻辑上可以被分为三个部分:核心组件etc数据库,对etcd进行直接操作的入口组…

科学家使用DL和其他工具预测2019年新型冠状病毒宿主和传染性

一项新的研究表明,2019年新型冠状病毒(2019-nCoV)的人与人之间的传播可能早在2019年12月中旬就开始了。这些发现与武汉市卫生健康委员会在12月底或1月初的声明相矛盾,即“没有发现2019-nCoV在人与人之间传播的重要证据”。 这项研…

Netty核心源码解析(二)--ServerBootstrap启动过程

serverbootstrap用于建立netty服务端,核心逻辑-- 设置线程池-- bossGroup和workGroup设置accept连接handler定义服务器的serversocketchannel实现设置IO读写的业务逻辑相关childHanlder绑定监听端口-- 创建serversocketchannel对象初始化serversocketchannel--添加…

【HCIP】13.BGP选路

每条BGP路由至少携带3个属性,目的影响选路。 基本概念 公认必遵:所有厂家设备都要识别的属性;发送路由时必须携带的属性公认任意:所有厂家设备都要识别的属性;发送路由时候可以携带也可以不携带可选过渡:…

iPad怎么录屏?不会录屏?一步步教你操作!

ipad作为一款受欢迎的移动设备,不仅在娱乐和办公中发挥着重要作用,还可以用于创作和分享。录屏功能作为ipad的一项重要特性,允许用户将屏幕上的活动记录成视频,以便用于演示、教学、分享等用途。可是您知道ipad怎么录屏吗&#xf…

JVS低代码中表单引擎与逻辑引擎是如何联合调用外部API的?

在企业项目中,常常出现需要给外部系统提供一个api ,让外部系统触发调用,本系统直接数据入库,那么我们来看看jvs的表单引擎与逻辑引擎联合实现这个功能,先看实现效果: 配置步骤: 一、配置列表页…

算法竞赛入门【码蹄集新手村600题】(MT1200-1220)C语言

算法竞赛入门【码蹄集新手村600题】(MT1200-1220)C语言 目录MT1201 强数MT1202 克里希那穆提数MT1203 字母矩阵MT1204 字母三角MT1205 倒三角MT1206 金字塔MT1207 倒金字塔MT1208 菱形MT1209 沙漏MT1210 弗洛伊德三角MT1211 给定数字的乘法表MT1212 乘法表MT1213 x个…

春秋云境:CVE-2021-41402(flatCore-CMS v2.0.8 RCE)

目录 一、题目 1.一句话木马: 2.命令执行木马: 一、题目 靶标介绍: flatCore-CMS v2.0.8 存在后台任意代码执行漏洞 进入题目: robots.txt目录: /acp后台: admin/12345678 “Addons”-- “Installier…

海外移动应用广告变现平台——AdMob特点

海外的移动互联网广告平台非常多,比如 Admob、Facebook Audience Network、Applovin MAX、Unity、Vungle、Mopub、Amazon、Pubmatic、Fyber等等。 根据《2020全球手游广告买量投放与变现报告》,各国Top收益广告平台(针对游戏产品&#xff09…

回归预测 | MATLAB实现SSA-RF麻雀搜索优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现SSA-RF麻雀搜索优化算法优化随机森林算法多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现SSA-RF麻雀搜索优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)…

【算法日志】动态规划刷题:路径数问题(day34)

代码随想录刷题60Day 目录 前言 不同路径 不同路径(2) 前言 今天的动态规划题与昨天的题很类似&#xff0c;只不过今天的题是在二维上讨论&#xff0c;难度上略有提升。 不同路径 int uniquePaths(int m, int n) {vector<int> dp(n 1, 1);for (int i 1; i < m; …

问道管理:股票印花税是多少?印花税降低有何影响?

股票印花税&#xff0c;是指对证券商场上买卖、承继、赠与所确立的股权转让根据&#xff0c;按买卖额纳税。那么&#xff0c;我国股票印花税是多少&#xff1f;印花税下降有何影响&#xff1f;问道管理为我们预备了相关内容&#xff0c;以供参考。 股票印花税是多少&#xff1f…

初始C语言(7)——详细讲解有关初阶指针的内容

系列文章目录 第一章 “C“浒传——初识C语言&#xff08;1&#xff09;&#xff08;更适合初学者体质哦&#xff01;&#xff09; 第二章 初始C语言&#xff08;2&#xff09;——详细认识分支语句和循环语句以及他们的易错点 第三章 初阶C语言&#xff08;3&#xff09;——…

C++信息学奥赛2049:【例5.19】字符串判等

这段代码的功能是比较两个输入的字符串是否相等&#xff08;忽略大小写和空格&#xff09;&#xff0c;并输出 “YES” 或 “NO”。 解析注释后的代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {string arr; // 定义字符串变量arr&…

Python网络爬虫入门到实战

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 网络爬虫&#xff08;We…