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

news2024/11/18 0:00:18

每个人都用过 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.coloradmin.cn/o/1115611.html

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

相关文章

N-128基于springboot,vue酒店管理系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis 本系统功…

Web前端开发——新年倒计实时刷新

Web前端开发——年倒计实时刷新 H5(HTML5)前端开发是指使用HTML5、CSS3和JavaScript等技术进行网页和移动应用的开发。HTML5是最新的HTML标准,提供了丰富的语义化标签和功能,使得网页可以更加优雅和多样化。CSS3是用于样式表的升级版本,提供了更多的样式效果和布局控制能…

【企业级SpringBoot单体项目模板 】—— 项目代码管理

😜作 者:是江迪呀✒️本文关键词:SpringBoot项目模版、企业级、模版、代码管理☀️每日 一言:生命力顽强的种子,从不对瘠土唱诅咒的歌。 文章目录 一、第一种:先创建仓库1.1 创建仓库1.2 clone…

驱动点灯

#include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include "head.h" unsigned int major; char kbuf[128] {}; // 定义三个指针指向映射后的虚拟内存 u…

【LeetCode】59. 螺旋矩阵 II

1 问题 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]] 示例 2&#xff1a; 输入&#xff1a;n…

若依 ruoyi 新增每页分页条数

ruoyi-ui/src/components/Pagination/index.vue 下&#xff0c;找到pageSizes 数组中新增想要分页的数据量 &#xff1a;

Leetcode 202 快乐数(HashSet,环形链表思想)

Leetcode 202 快乐数&#xff08;HashSet&#xff09; 解法1 &#xff1a; 用HashSet来检测循环:star:为什么说数字n的位数由log n给定呢&#xff1f;解法2 &#xff1a; 链表的思想[出现循环表示链表出现环]&#xff0c;使用快慢指针法 题目链接>>>>>>>&…

Nginx介绍,nginx高级应用,nginx虚拟主机配置

HTTP介绍 在应用层 : HTTP&#xff0c;FTP&#xff0c;ssh&#xff0c;SMTP&#xff0c;POP3 网络层&#xff1a; TCP&#xff0c;UDP TCP:可靠的&#xff0c; UDP&#xff1a;不可靠的&#xff0c;直播&#xff0c;视频 qq 微信 HTTP协议是Hyper Text Transfer Protocol&#…

【多线程、单线程、异步编程】三个版本--在爬虫中的应用

并发编程在爬虫中的应用 之前的课程&#xff0c;我们已经为大家介绍了 Python 中的多线程、多进程和异步编程&#xff0c;通过这三种手段&#xff0c;我们可以实现并发或并行编程&#xff0c;这一方面可以加速代码的执行&#xff0c;另一方面也可以带来更好的用户体验。爬虫程…

2023阿里云双十一到底有没有活动?去年就没有

2023阿里云双十一到底有没有活动&#xff1f;根据以往经验&#xff0c;阿里云双11是一次大型促销活动&#xff0c;但是去年好像就没有&#xff0c;印象里去年阿里云没推出双十一活动&#xff0c;因为阿里云一直都活动&#xff0c;没有单独推出双11优惠&#xff0c;阿里云百科给…

投稿时如何上传匿名源码

1 参考博客&#xff1a; how to disclose data for double-blind review and make it archived open data upon acceptance 2 查看DOI&#xff1a; 3 然后在论文参考文献前面放入DOI链接&#xff1a; 7 DATA AVAILABILITY The artifacts and experimental files are archive…

内核初始化的过程

内核的启动从入口函数 start_kernel() 开始。在 init/main.c 文件中&#xff0c;start_kernel 相当于内核的 main 函数。打开这个函数&#xff0c;你会发现&#xff0c;里面是各种各样初始化函数 XXXX_init。 在操作系统里面&#xff0c;先要有个创始进程&#xff0c;有一行指令…

Quartus调用FIFO-IP核verilog,DE1开发板,代码和视频

名称&#xff1a;Quartus调用FIFO-IP核&#xff0c;完成数据的求和 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 题目&#xff1a;FIFO-IP核的调用 主要内容&#xff1a;调用两个FIFO-IP核&#xff0c;完成2行数据的求和 技术参数&#xff1a…

前言:自动化框架的设计模式

1、UI自动化框架的设计模式 自动化测试框架有很多种&#xff0c;常见的自动化框架分类如下&#xff1a; 在使用上面的自动化框架时&#xff0c;通常会结合使用分层思想&#xff0c;也就是一些自动化框架设计模式&#xff0c;今天重点分享一下UI自动化框架设计使用比较多的一种…

基于yolov5的目标检测和双目测距

目录 一.简介 1.双目视觉 2 YOLOv5 二.双目准备 1双目矫正 2.测距部分代码和函数 三.yolov5部分代码代码展示 效果展示 一.简介 1.双目视觉 双目视觉是通过两个摄像机同时拍摄同一场景&#xff0c;通过计算两幅图像的差异来获取深度信息的一种计算机视觉技术。在双目视…

文心一言 VS 讯飞星火 VS chatgpt (117)-- 算法导论10.3 2题

二、用go语言&#xff0c;对一组同构对象用单数组表示法实现&#xff0c;写出过程ALLOCATE-OBJECT和FREE-OBJECT。 文心一言&#xff1a; 在Go语言中&#xff0c;我们通常使用指针和结构体来表示和操作复杂的数据结构。对于一组同构对象&#xff0c;我们可以使用一个数组来存…

SQL INSERT INTO 语句(在表中插入)

SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新的数据行。 SQL INSERT INTO 语法 INSERT INTO 语句可以用两种形式编写。  第一个表单没有指定要插入数据的列的名称&#xff0c;只提供要插入的值&#xff0c;即可添加一行新的数据&#xff1a; INSERT INTO table_n…

【马蹄集】—— 概率论专题:排列组合

概率论专题&#xff1a;排列组合 目录 MT2226 抽奖概率MT2227 饿饿&#xff01;饭饭&#xff01;MT2228 甜甜花的研究MT2229 赌石MT2230 square MT2226 抽奖概率 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目描述 小码哥正在进行抽奖…

积极开拓北美市场,泡泡玛特在美国的首家直营门店正式开业

近几年&#xff0c;随着年轻人在消费市场的声量越来越大&#xff0c;潮玩便像一阵风似地席卷新消费空间&#xff0c;形成一种独特的流行趋势。作为中国领先的潮流文化娱乐公司&#xff0c;泡泡玛特除了深耕潮玩产品本身&#xff0c;也在不断拓展业务版图&#xff0c;推进国际化…

P1664 每日打卡心情好 题解

文章目录 题目背景题目描述输入格式输出格式样例样例输入样例输出 数据范围与提示思路及部分实现完整代码文章小结 题目背景 在洛谷中&#xff0c;打卡不只是一个简单的鼠标点击动作&#xff0c;通过每天在洛谷打卡&#xff0c;可以清晰地记录下自己在洛谷学习的足迹。通过每天…