全面指南:API测试定义、测试方法与高效实践技巧
HTTP API vs WebSocket API:选择哪个来实现实时通信?
在 HTTP 中,API是一种使用 HTTP 协议进行通信的接口,用于让不同的应用程序之间进行数据交换。因此,通俗来讲HTTP API 是一种使用 HTTP 协议通信的接口,常用的 API 格式包括 RESTfuI API和 SOAP API。
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket API与传统API一样都是由通信协议、域名、版本号、路径、请求参数等要素组成,只是由于WebSocket API在完成握手流程之后,客户端和服务端之间就创建了持久性的连接,并且可以直接用文本消息或者二进制消息进行通信的数据交互。
那么,到底该选择哪个进行实时通信呢?或许你可以通过以下的比对信息中,了解到二者的区别与优势所在。
使用效能上的差别
HTTP API 通常使用 HTTP 协议的 GET、POST、PUT、DELETE 等请求方法,来向服务器请求或提交数据。API 通过 URl(Uniform Resource ldentifier)来标识被请求的资源,URI中包含了 API 的路径、查询参数和选择器等信息。常用的 API格式包括 RESTfuI API和 SOAPAPI。
RESTfuI API 是一种基于 REST(Representational State Transfer)的 API 设计风格,用于构建单个 URI,通过不同的 HTTP 方法实现不同的操作,例如 GET 用于获取资源,POST 用于创建或添加资源,PUT 用于更新资源,DELETE 用于删除资源等。RESTfuI API 的优点是简单、易扩展、易学习,适合于构建现代的分布式应用程序。
SOAP API 是一种基于 XML(eXtensible Markup Language)的 API 设计风格,通过传输XML 格式的数据进行通讯,其中定义了丰富的消息头、请求体等信息。SOAP API 的优点是功能强大、可扩展性好,适合于企业级应用程序。但是 SOAP API 也因为格式复杂,使用不太友好而被 RESTfuI API 所取代和代替。
综上所述,RESTfuI API 简单易学,适用于构建现代的分布式应用程序。SOAP API功能强大,适用于企业级应用程序。
WebSocket实时通信API是一种在客户端与服务器之间建立全双工、低延迟、双向通信通道的协议。它通过在HTTP协议的基础上进行扩展,允许服务器主动向客户端推送数据,而不仅仅局限于传统的客户端发起请求、服务器响应的模式。WebSocket API有着以下几个特点:
- (1)全双工通信:客户端和服务器都可以随时向对方发送数据,无需等待对方请求。
- (2)持久连接:一旦WebSocket连接建立,连接将持续保持打开状态,直到其中一方显式关闭连接。
- (3)轻量级协议:帧格式简洁,减少了数据在网络上传输的开销。
- (4)实时性:由于避免了频繁的HTTP请求,实时数据传输效率更高,特别适用于实时聊天、股票报价、游戏、协同编辑等场景。
WebSocket API的通信过程是客户端和服务器通过HTTP协议进行初始握手,然后升级为WebSocket协议。一旦连接建立,双方可以在任何时候通过WebSocket API互相发送数据帧。WebSocket API的广泛应用极大地提升了Web应用程序的实时交互能力,降低了传统轮询和长轮询方式带来的资源消耗和延迟问题。
二者的构成框架
以HTTP API 在Forest中的使用为例,Forest是一个开源的 Java HTTP 客户端框架,能够通过调用本地接口方法的方式发送 HTTP 请求。
其中,HTTP 发送请求的过程分为前端部分和后端部分,Forest 本身是处理前端过程的框架,是对后端 HTTP API 框架的进一步封装。 前端部分包括Forest 配置、Forest 注解、动态代理、模板表达式和数据转换等。后端则为实际执行 HTTP 请求发送过程的第三方 HTTP API,目前支持okHttp3和httpclient两种后端 API 。开发者使用 Forest时,首先要做好
全局配置:application.yml / application.properties配置(spring、Spring Boot项目)以及通过ForestConfiguration对象(普通Java项目)设置,并完成接口配置(作用域为某一个interface中定义的请求,读取的优先级最小。可以通过在interface上修饰@BaseRequest注解进行配置)。最后完成请求配置(作用域为某一个具体的请求,读取的优先级最高。可以在接口的方法上修饰@Request注解进行 HTTP 信息配置的定义)。
WebSocket API有大量的框架和库 。WebSocket服务器可以用任何支持Berkeley socket的服务器端编程语言编写。服务器使用标准TCP套接字监听传入的WebSocket连接。一旦协商好了开始握手,服务器必须能够发送、接收和处理WebSocket消息。操作出WebSocket 构造器,首先,要在客户端开始使用WebSocket API,首先要做的是实例化一个WebSocket对象,它会自动尝试打开到服务器的连接:“const socket = new WebSocket(‘wss://example.org’);”,其中WebSocket构造函数包含一个必需的参数 — WebSocket服务器的url。此外,可选的protocols参数也可以包含在内,以指示一个或多个WebSocket子协议(应用程序级协议),可以在客户端-服务器通信期间使用:“const socket = new WebSocket(‘wss://example.org’, ‘myCustomProtocol’);”一旦创建了WebSocket对象并建立了连接,客户机就可以开始与服务器交换数据了。
实现实时通信的操作难易
为了实现HTTP API的实时通信,开发者要使用长轮询(Long Polling)或者WebSocket。以一个使用Python的Flask框架和Flask-Socketl0扩展实现WebSocket实时通信为简单示例。
首先,安装必要的包:pip install flask flask-socketio。然后编写服务器代码,期间,开发者可以定义简单的Web应用,并在/test命名空间上设置了WebSocket服务。当客户端连接到/test命名空间时,会自动调用@socketio.on(‘connect’)装饰器指定的函数,并发送一个my response事件。开发者也能监听到disconnect事件来知道客户端何时断开连接。最后,开发者可以定义my event事件的处理函数,向所有客户端广播接收到的数据。
使用websockets库创建一个WebSocket服务器端,以使用Python为示例。开发者要先安装websockets库:pip install websockets,然后,编写服务器代码。确定代码后,在本地主机的8765端口启动一个WebSocket服务器,它会回显任何收到的消息。这段代码创建了一个WebSocket客户端,连接到本地主机的8765端口,发送一条消息,并在接收到服务器的响应时在控制台打印出来。
参考网址:
WebSocket API安全风险解读 – 知乎 (zhihu.com)
WebSocket实时通信API – 袋鼠社区-袋鼠云丨数栈丨数据中台丨数据治理丨湖仓一体丨数据开发丨基础软件 (dtstack.com)