首页 > 其他分享 >2023年API协议排行榜【杭州多测师_王sir】

2023年API协议排行榜【杭州多测师_王sir】

时间:2023-09-26 09:44:21浏览次数:55  
标签:sir 调用 多测师 协议 gRPC 接口 API Apifox

《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 查询示例,假设我们要获取一个博客应用中的文章信息:

在这个查询中:
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
SOAP(Simple 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
前面的各种协议,大都适用于前端和后端的通信。而 gRPC(gRPC 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 的二进制格式更加紧凑,节省了更多带宽和存储空间。

一些典型的使用场景包括:
分布式系统通信:MsgPack 可用于在不同的服务之间传输数据,减少网络负载,提高通信效率。
高性能应用:对于需要快速序列化和反序列化数据的应用,MsgPack 提供了比文本格式更快的速度。
数据存储:MsgPack 可以用于将数据紧凑地存储在文件或数据库中,节省存储空间。
嵌入式系统:MsgPack 适用于资源有限的嵌入式系统,因为它的解析相对轻量。
MsgPack 有多种语言的实现,因此可以轻松地在不同编程语言之间进行数据交换。它还支持多种数据类型,包括数字、字符串、数组、映射和自定义类型,使得它非常灵活。

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

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

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

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

 

本文引用于:https://mp.weixin.qq.com/s/l-8Nd9JMRii1oceI46KZoQ

 

标签:sir,调用,多测师,协议,gRPC,接口,API,Apifox
From: https://www.cnblogs.com/xiaoshubass/p/17729410.html

相关文章

  • 在线问诊 Python、FastAPI、Neo4j — Cypher 生成
    目录构建节点字典构建CypherCQL语句Test这边只是为了测试,演示效果和思路,实际应用中,可以通过NLP构建CQL接上一篇的问题分类question="请问最近看东西有时候清楚有时候不清楚是怎么回事"#最终输出data={'args':{'看东西有时候清楚有时候不清楚':['symptom']},'questio......
  • WebApi中添加Jwt鉴权
    前言JSONWebToken(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。前两部分需要经过Base64编码,后一部分通过前两部分Base64编码后再加密而成。针对前后端分离的......
  • 金蝶云星空自定义WebApi
     1、创建项目,命名规范:开发商.K3.SCM.WebApi.ServicesStub 2、添加引用 usingKingdee.BOS.ServiceFacade.KDServiceFx;usingKingdee.BOS.WebApi.ServicesStub;3、新建类,继承webapi业务抽象服务AbstractWebApiBusinessService。///<summary>///......
  • P3629 [APIO2010] 巡逻
    原题可以发现,当\(K=0\)时,答案为\(2(n-1)\),而当在两端点连了一条边后,则操作方法为如果这条路径上的某条边被标记过,则取消这条边标记;否则把这条边标记为标记过,答案即为未被标记的边*2+标记过的边+连边的个数当\(K=1\)时:答案显然为树的直径当\(K=2\)时:我们还是考......
  • 【SmartApi】设置超时时间timeout
    在内测几个版本后,有用户反应设置请求超时时间过于麻烦和不直观,于是在和大家交流后把这个功能提上日程,事实上这个功能设置还是很简单的,于是就在请求面板里添加了一个timeout选项卡,如下图:具体使用如下:1、选择一个api请求,点击“timeout”选项卡如下图:2、这里有两项功能,第一个是......
  • 在线问诊 Python、FastAPI、Neo4j — 构建问题分类器
    目录构建字典数据构建Trie字典树按实体组装字典问题分析将问题进行分析,和系统已有的分类进行关联构建字典数据将构建的知识图片字典化,用于后面对问题的解析,下图为症状的字典,其它字典同理构建Trie字典树将建字典数据,组装集合cur_dir='/'.join(os.path.abspath(__file......
  • [WPF] 随笔1:MVVM在ViewModel更新Image控件的BitmapImage值时报:必须在与 DependencyObj
    MVVM在ViewModel更新Image控件的BitmapImage值时报:必须在与DependencyObject相同的线程上创建DependencySource原因:必须在UI线程创建BitmapImage=>链接解决方案:使用MemoryStream加载图片,并在UI线程转换成BitmapImage=>链接接下来是我的写法Tip:我用的是MVVMLightViewM......
  • 使用 Docker Compose 安装 APISIX
    1.基本概念APISIX是Apache下的一款云原生的API网关,支持全生命周期的API管理,在应用中可以作为所有API调用的统一入口。APISIX有一些基础概念如下:Upstream,或者叫做上游,是一组目标主机的抽象,上游一组节点提供实际的业务服务,一般需要指定负载均衡策略去调用。Route,路由......
  • Spartacus 启动时 basesites OCC API 请求的技术细节
    SAPSpartacus是一款开源的电子商务前端框架,旨在提供可扩展、可自定义和可维护的电子商务Web应用程序。在Spartacus应用程序启动时,发起的OCC(OpenCommerceCloud)请求occ/v2/basesites?fields=FULL是一个重要的请求,用于获取有关基本站点(basesites)的信息。本文将详细介绍这个请求的......
  • 7.5 通过API判断进程状态
    进程状态的判断包括验证进程是否存在,实现方法是通过枚举系统内的所有进程信息,并将该进程名通过CharLowerBuff转换为小写,当转换为小写模式后则就可以通过使用strcmp函数对比,如果发现继承存在则返回该进程的PID信息,否则返回-1。intGetProcessStatus(constchar*procressName){......