API 排行榜,盘点用的最多的 API 协议!

每个人都用过 HTTP 协议。在网页端,在 App 端,大部分的数据交换都基于 HTTP 协议,但你也许会听过其他的一些协议。

从 《2023 全球 API 状况报告》 里的数据,我们能看到全球的开发者使用最多的 API 协议:

图片

这些协议有什么不同?为什么要有那么多种协议?这些协议到底要怎么使用?

本文盘点了其中最常用的九大 API 协议/接口规范,它们分别是:

  • REST
  • GraphQL
  • SOAP/Web Service
  • WebSocket
  • Socket
  • SSE
  • gRPC
  • Dubbo
  • MsgPack

REST

REST 其实不是一种协议,REST  接口使用的网络协议是 HTTP。

HTTP 协议非常适合那些采用单向的请求 - 响应模式的应用,比如访问社交媒体上的照片或者新闻文章,但是它并不适合需要双方实时通信的应用,比如在线游戏或视频聊天。

REST 是在开发者使用 HTTP 协议时共同遵守的设计原则,是一种软件架构风格,它并不是一种硬性的技术标准。REST 风格 API 一般长这个样子:

图片

如何调用

浏览器可能是最简单的 REST 接口调用工具。浏览器地址栏就是一个最原始的 GET 请求发起器,它会将 GET 返回的数据展示在网页里。

但是,要实现 POST、PUT、DELETE 等动作就要写代码了。当然,你也可以使用像 Apifox 这样的 API 工具,一键发起各种类型的 HTTP 请求。

图片

GraphQL

在上面的 REST 接口里,我们需要预先定义好各种具体的操作的接口(获取所有用户,获取特定用户,按标签查询用户等),就像饭店里固定搭配的套餐。

而 GraphQL 是一种灵活的数据查询语言,让你可以像点餐一样精确地获取你需要的数据,好比你在餐馆里直接告诉服务员想要哪些食物,以及烹饪方式,而不是被迫点一份固定的套餐。

GraphQL 适用于那些需要大量互动、实时数据或者多层次数据的应用。比如社交媒体的实时消息更新、即时通讯或者数据可视化工具。它能够满足不同应用的各种需求,因为你可以在一个请求中包含多个查询,从而减少了网络请求的数量。

如何调用

当使用 GraphQL 进行数据调用时,你会构建一个查询(Query)来获取你需要的数据。这个查询看起来类似于一个 JSON 对象,你可以指定所需的字段和参数。以下是一个简单的 GraphQL 查询示例,假设我们要获取一个博客应用中的文章信息:

image.png

在这个查询中:

  • query 表示这是一个查询操作。
  • article(id: 123) 表示我们想要获取一篇文章,其中 id 参数为 123。
  • 在大括号 {} 内,我们指定了想要获取的字段,如 title、content 和 author。
  • 在 author 字段下,我们还指定了作者的信息字段,包括 name 和 email。

当发送这个查询到 GraphQL 服务器时,服务器会返回一个 JSON 响应,包含与查询匹配的数据。好比构建一个查询,指定你需要的数据字段,然后向服务器发送查询,并接收服务器返回的 JSON 响应以获取所需的数据。响应可能如下所示:

图片

这个响应包含了我们所请求的文章的标题、内容以及作者的信息。所有数据都以嵌套的方式返回,与查询的结构一致。这种方式允许客户端精确地获取所需的数据,而不会浪费带宽和资源。

在 Apifox 中,可以直接使用 HTTP POST 方式发起 GraphQL API 请求。你只需要将 Body 类型指定为 GraphQL,将请求 JSON 写入 Query 即可。

你可以在 Query 中使用变量,将变量值写入 Variables 框,就可以更加便利地调用固定格式的 GraphQL 请求。

图片

SOAP / Web Service

SOAPSimple Object Access Protocol,简单对象访问协议)是一种跟 REST 类似,但更古早一点的协议。它跟 REST 的最大的差异是使用 XML 方式作为 body 来传递信息。它提供了强大的功能,包括安全性、事务性操作和可扩展性,但也因其 XML 格式相对冗长而被一些新的通信协议所取代。

Web Service 是一个比较古早的名词,现在一般指使用 SOAP 协议的接口服务。

如何调用

要使用 SOAP/Web Service,你需要定义一个 SOAP 消息的格式,通常使用 XML 来表示消息的结构和内容。消息由一个 envelope(信封)包裹起来,其中包含了 header(头部)和 body(主体)部分。header 可用于包含一些元数据和安全信息,而 body 包含实际的数据。

在 Apifox 中调试 SOAP 接口时,只需要根据接口实际情况,手动设置 Header 的 Content-Type 的值为 text/xml; charset=utf-8 或 application/soap+xml,然后设置 Body 格式为 xml,点击「发送」,即可收到 SOAP 接口返回的 XML 格式的数据。

图片

WebSocket

无论是 REST、GraphQL 还是 SOAP,都是一问一答式的通信。但有时我们需要更高频的数据交换,比如实时聊天,这时候就需要一种新的协议来解决了。

WebSocket 是一种特殊的通信协议,它与传统的 HTTP 协议不同,它更像是一条电话线,允许服务器和客户端之间进行实时、双向的对话。就像是你在打电话,而不只是发短信。

WebSocket 适合处理需要实时性和双向通信的应用,比如在线聊天、多人协作编辑、在线游戏或者实时股票市场数据更新。它能够让服务器主动向客户端发送消息,而不必等待客户端的请求。这种特性对于那些需要即时响应的应用非常重要。

与 HTTP 不同,WebSocket 不是一次性的请求-响应模式。它通过建立一个持久连接,双方可以随时发送消息。这就像是你与朋友进行实时对话,而不是发电子邮件等待回复。

如何调用

在 Apifox 中,你可以输入服务器 URL,点击「连接」,一个 Websocket 长连接就建立起来了。

接下来,你可以通过发送 JSON 数据的方式跟服务器通信,也可以实时接收到服务器下发的数据,实现双向实时数据传输。你可以在左下角的时间线视图里方便地查看所有通信记录。

图片

Apifox 还支持直接生成 Websocket 协议的 API 文档。你可以点击查看更多使用技巧:《Apifox WebSocket 调试功能你会用了吗?

图片

Socket

Socket 协议是一个非常古早的通信模型,使用 TCP 作为网络通信协议,允许不同程序/计算机之间通过网络传输数据。Socket 通信也是一种实时、双向的通信方式,客户端和服务器之间建立持久连接后,双方可以随时发送和接收数据。

不过与 WebSocket 有所区别的是,Socket 提供了底层的网络编程接口,允许开发者完全控制数据传输过程。并且采用 TCP 协议使得 Socket 用于更广的场景,包括实时通信、文件传输、远程控制等

如何调用

进入 Apifox 项目后,点击左侧搜索框旁边的 + 号按钮,轻点「新建 Socket 服务」选项。

图片

创建了 Socket 服务之后,可以继续添加在 Socket 服务之下的接口。Apifox 支持自定义接口请求和响应的数据处理函数,方便进行各种灵活的调试。

图片

SSE

当我们在使用 ChatGPT 聊天的时候,你会发现文字是一个一个蹦出来的,这跟微信聊天又有所不同。

ChatGPT 使用的是 SSE(Server-Sent Events)技术,全称是服务器推送事件,它是一种基于 HTTP 协议的实时通信技术。用于在客户端和服务器之间建立持久、单向的链接。虽然和 WebSocket 类似都具备实时连接功能,但 WS 是支持双向连接的,而 SSE 是单向的,只支持服务端向客户端发送异步消息,使得它对带宽资源消耗较小

也就是说,WebSocket 是两个人互相打电话,而 SSE 是客户端发短信,服务端讲电话。

如何调用

使用 Apifox 调试 SSE 接口时,仅需要像调试普通的 HTTP 接口一样新建接口。

图片

当接口的返回数据的 Content-Type 包含 text/event-stream 参数时,Apifox 会自动将返回的数据解析为 SSE 事件,并以全新的时间线视图实时更新响应内容

图片

gRPC

前面的各种协议,大都适用于前端和后端的通信。而 gRPCgRPC Remote Procedure Call,远程过程调用)不同,它更多地是用于后端和后端之间的通信。

在大型企业中,往往使用微服务架构,不同的服务由不同的系统实现。比如订单服务、商品服务、用户信息服务部署在不同的服务器上,这些系统可能使用了各自不同的技术。

gRPC 适合用于构建分布式系统中的微服务架构,尤其是需要高性能、低延迟和跨语言通信的情况。与传统的 HTTP 或 REST API 相比,gRPC 更加轻量级且高效,它使用 Protocol Buffers(ProtoBuf)作为数据序列化格式,这使得数据传输更加紧凑和快速。

一个典型的 gRPC 场景包括多个微服务之间的通信,例如用户服务需要从订单服务获取信息。gRPC 允许你定义服务接口和方法,并生成客户端和服务器端的代码,使得开发过程更加简化。这就像是国际邮件服务,你只需知道如何填写地址和标明信件的内容,剩下的工作由邮递员和邮局来完成。

在企业中,后端往往会使用 gRPC 来调用企业内部不同系统之间的服务,而使用 REST API 来对前端提供服务。

图片

如何调用

你只需要先在 Apifox 中创建 gRPC 项目即可开始调试:

图片

Apifox 支持以下 4 种类型方法调用 gRPC 接口:

  • Unary:一元调用
  • Server Streaming:服务端流
  • Client Streaming:客户端流
  • Bidirectional Streaming:双向流

相较于市面上的其它 gRPC 调试软件,Apifox 为 gRPC 流式调用提供了一个时间线视图,按照时间顺序集中展示调用状态、发送和收到的消息。

图片

Dubbo

Dubbo 框架是由阿里巴巴开发的一款分布式服务框架,Dubbo 协议是该框架中的一部分,用于微服务之间的通信。

Dubbo 协议的使用场景跟 gRPC 是类似的,主要用于后端之间的通信。两者都是强大的分布式通信框架,选择哪一个取决于你的具体需求和技术栈。如果你在 Java 生态系统中工作,并需要稳定性和可用性,Dubbo 可能是更好的选择。如果你需要跨语言支持、强类型定义和高性能的通信,gRPC 可能更适合你。

Dubbo 协议采用了二进制序列化和网络传输方式,相比 REST API 采用文本模式传输数据,二进制格式数据传输模式可以提供更高的效能和花费更小的开销,非常适合内网环境。

因此 Dubbo 协议尤其擅长处理大规模微服务架构中的服务调用和治理问题,支持多种主流网络传输协议和多种序列化格式,在国内的后端开发者当中十分流行。

图片

如何调用

Apifox 支持管理与调试 Dubbo 项目,目前支持 ZooKeeper、Nacos、阿里云 EDAS 三种外部导入渠道。

图片

导入接口后,点击右上角的「调用」按钮,即可得到接口的返回结果。

图片

MsgPack

MsgPack(MessagePack)也不是协议。它是一种将数据序列化成紧凑的二进制格式的开放标准。它就像是将数据压缩成小巧的包裹,以便于在不同系统之间更快地传输和存储。 MsgPack 适合用于需要高效传输数据的场景,尤其对网络流量敏感的移动 APP 中。与 JSON 等文本格式相比,MsgPack 的二进制格式更加紧凑,节省了更多带宽和存储空间。

一些典型的使用场景包括:

  1. 分布式系统通信:MsgPack 可用于在不同的服务之间传输数据,减少网络负载,提高通信效率。
  2. 高性能应用:对于需要快速序列化和反序列化数据的应用,MsgPack 提供了比文本格式更快的速度。
  3. 数据存储:MsgPack 可以用于将数据紧凑地存储在文件或数据库中,节省存储空间。
  4. 嵌入式系统:MsgPack 适用于资源有限的嵌入式系统,因为它的解析相对轻量。

MsgPack 有多种语言的实现,因此可以轻松地在不同编程语言之间进行数据交换。它还支持多种数据类型,包括数字、字符串、数组、映射和自定义类型,使得它非常灵活。

如何调用

在 Apifox 中,可以直接使用 HTTP POST 方式发起 MsgPack 请求,只需要将 Body 类型选择为 MsgPack,将请求 JSON 写入 Query 即可。

图片

以上列出了九种常用的 API 协议/接口规范,Apifox 现已全部支持

图片

Apifox 作为先进的 API 设计/开发/测试工具,不断兼容市面上流行的 API 协议,让开发人员不必再为某个 API 协议而苦苦寻找接口调试工具。

Apifox = Postman + Swagger + Mock + JMeter

一个工具就可以解决 API 开发 → 调试 → 管理问题,让更多中国开发团队也能够体验到一流的一站式 API 管理方案。

图片

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

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

相关文章

使用poco出现Cannot find any visible node by query UIObjectProxy of “xxx“怎么办

在编写脚本的时候,使用poco的控件识别已经是大家非常喜欢的一种方式,准确度很高,而且也很容上手。 但是有时候会出现下面这种报错,提示 Cannot find any visible node by query UIObjectProxy of “xxx“这个时候是不是开始着急…

前端 js 之 浏览器工作原理 和 v8引擎 01

嘿,老哥,来了就别跑 !学完 ,不亏 😂 文章目录 一、输入url 之后做了什么二、简单了解下浏览器内核三、浏览器渲染过程 (渲染引擎)四、js 引擎五、chrome五、v8 引擎原理八、浏览器性能优化九、前…

计算机算法分析与设计(13)---贪心算法(多机调度问题)

文章目录 一、问题概述1.1 思路分析1.2 实例分析 二、代码编写 一、问题概述 1.1 思路分析 1. 设有 n n n 个独立的作业 1 , 2 , … , n {1, 2, …, n} 1,2,…,n,由 m m m 台相同的机器 M 1 , M 2 , … , M m {M_1, M_2, …, M_m} M1​,M2​,…,Mm​ 进行加工处…

Qemu镜像安全加密测试

文章目录 简介1.已经过时的qemu自带的加密方式介绍1.1.创建secret uuid的xml1.2.产生uuid1.3.给secret赋值1.4.创建一个存储池1.5.在存储池中创建一个镜像1.6.在虚拟机中使用该镜像 2.弃用以上加密方式2.1.原作者Daniel Berrange的观点2.2.Markus Armbruster更深入的操作 3. LU…

vue实现在页面拖拽放大缩小div并显示鼠标在div的坐标

1、功能要求&#xff1a; 实现在一个指定区域拖拽div,并可以放大缩小&#xff0c;同时显示鼠标在该div里的坐标&#xff0c;如图可示 缩小并拖动 2、实现 <div class"div_content" ref"div_content"><div class"div_image" id"…

【运维知识高级篇】超详细的Jenkins教程5(pipeline流水线配置+分布式构建)

CI/CD是持续集成&#xff0c;持续部署&#xff0c;集成就是开发人员通过自动化编译&#xff0c;发布&#xff0c;测试的手段集成软件&#xff0c;在开发的测试环境上测试发现自己的错误&#xff1b;持续部署是自动化构建&#xff0c;部署&#xff0c;通常也是在测试环境上进行&…

014 - ARM64上的GIC-400(GICv2)

本章节涉及到的参考文档有三个&#xff1a; BCM2711 ARM Peripherals.pdfARM Generic Interrupt Controller Architecture Specification.pdf (简称gic_v2)CoreLink GIC-400 Generic Interrupt Controller Technical Reference Manual.pdf 1. GIC 发展历史 在早期的 ARM 系统…

深度学习技巧应用29-软件设计模式与神经网络巧妙结合,如何快速记忆软件设计模式

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下软件设计模式与神经网络巧妙结合&#xff0c;如何快速记忆软件设计模式。我们知道软件设计模式有23种&#xff0c;考试的时候经常会考到&#xff0c;但是这么种里面我们如何取判断它呢&#xff0c;如何去记忆它呢&a…

双指针——盛水最多的容器

一, 题目要求 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容…

Jmeter接口自动化测试 —— Jmeter下载安装及入门

jmeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 下载 下载地址&#xff1a;Apache JMeter - Download Apache JMeter 安装 由于Jmeter是基于Java的…

酷克数据发布HD-SQL-LLaMA模型,开启数据分析“人人可及”新时代

随着行业数字化进入深水区&#xff0c;企业的关注点正在不断从“数字”价值转向“数智”价值。然而&#xff0c;传统数据分析的操作门槛与时间成本成为了掣肘数据价值释放的阻力。常规的数据分析流程复杂冗长&#xff0c;需要数据库管理员设计数据模型&#xff0c;数据工程师进…

STP生成树协议详解

一、STP作用 如果链路断开或节点故障&#xff0c;那么互联的设备就无法正常通信了&#xff0c;这类网络问题叫做单点故障。没有备份的链路或节点&#xff0c;出现故障会直接断网。如果要提供 724 小时不间断的服务&#xff0c;那就需要在网络中提前部署冗余。避免出现单点故障…

快速入门python机器学习

文章目录 机器学习概述1.1 人工智能概述机器学习与人工智能、深度学习1.1.2 机器学习、深度学习能做些什么 1.2 什么是机器学习1.2.1 定义1.2.2 解释1.2.3 数据集构成 1.3 机器学习算法分类1.3.1 总结1.3.2 练习1.3.3 机器学习算法分类 1.4 机器学习开发流程&#xff08;了解&a…

ECharta雷达图 样式调整

预期效果&#xff1a; <template><div id"operationalRisk-radar-chart" class"h-290 w-385"></div> </template><script>export default {name: radarChart} </script> <script setup>import { onMounted, r…

CleanMyMac X4.14.4最新免费版本功能介绍

最新版CleanMyMac X 让您的Mac焕然一新&#xff0c;时刻保持安全&#xff01;CleanMyMac X是一款专业的Mac清理软件&#xff0c;可智能清理mac磁盘垃圾和多余语言安装包&#xff0c;快速释放电脑内存&#xff0c;轻松管理和升级Mac上的应用。同时CleanMyMac X可以强力卸载恶意软…

GEO生信数据挖掘(八)富集分析(GO 、KEGG、 GSEA 打包带走)

第六节&#xff0c;我们使用结核病基因数据&#xff0c;做了一个数据预处理的实操案例。例子中结核类型&#xff0c;包括结核&#xff0c;潜隐进展&#xff0c;对照和潜隐&#xff0c;四个类别。第七节延续上个数据&#xff0c;进行了差异分析。 本节对差异基因进行富集分析。 …

大咖云集,智慧碰撞|第 18 届 CLK 大会完整议程揭晓(内附报名通道)

自 2006 年以来&#xff0c;在国内 Linux 技术爱好者和行业公司的鼎力支持下&#xff0c;中国 Linux 内核开发者大会已走过 17个年头&#xff0c;是中国 Linux 内核领域最具影响力的峰会之一。今年的中国内核开发者大会依然秉承历届理念&#xff0c;以“自由、协作、创新”为理…

Python-Python高阶技巧:闭包、装饰器、设计模式、多线程、网络编程、正则表达式、递归

版本说明 当前版本号[20231018]。 版本修改说明20231018初版 目录 文章目录 版本说明目录Python高阶技巧闭包简单闭包修改外部函数变量的值实现以下atm取钱的闭包实现了闭包注意事项 装饰器装饰器的一般写法&#xff08;闭包写法&#xff09;装饰器的语法糖写法 设计模式单例…

x86 架构的机载计算机,它来了!

Allspark 2-x86采用Intel酷睿11代或12代CPU&#xff0c;x86架构&#xff0c;适用于无人机等机器人运行SLAM、VIO等复杂逻辑和高精度的机器视觉任务。预装 Ubuntu 22.04或Windows 11&#xff0c;满足多种使用场景。 市面上现有的一些NUC产品&#xff0c;不仅没有针对移动机器人使…

【数据结构】线性表(三)循环链表的各种操作(创建、插入、查找、删除、修改、遍历打印、释放内存空间)

目录 线性表的定义及其基本操作&#xff08;顺序表插入、删除、查找、修改&#xff09; 四、线性表的链接存储结构 1. 单链表 2. 循环链表 a. 循环链表节点结构体 b. 创建新节点 c. 在循环链表末尾插入节点 d. 删除循环链表中指定值的节点 e. 在循环链表中查找指定值的…