web前-JAVA后端 数据API接口交互协议

简介: 目前热门的主流web前端和Java后端数据技术架构:设备端和后台服务端,两者之间主要有两类的数据流和一类的控制流进行数据的交互。

前言

目前热门的主流web前端和Java后端数据技术架构:设备端和后台服务端,两者之间主要有两类的数据流和一类的控制流进行数据的交互。其图示可以根据下图的流程图表示:

2345_image_file_copy_180.jpg

这里的WebSocket就不进行详述,可以参考本人的另一篇关于WebSocket的介绍和使用的博客:VUE+websocket编写实现PC web端控制摄像头_丘比特惩罚陆的博客-CSDN博客

  上图的解析是,数据流1是某一功能的数据进行流动上报等操作,这一类饿交互关系采用的是http协议中的post请求,经过这一个请求报文可以将数据发送到平台上。数据流2是实时流的媒体数据,是由设备端将数据进行推流,推流到的地址可以是自己买的、拥有公网IP的媒体流转发服务器;第三个我们的控制流WebSocket意思是命令交互一类的数据,这一类的控制流数据采用的法式WebSocket长连接进行双向的交互模式,这个操作是由设备端发起进行连接的。

2345_image_file_copy_182.jpg

 WebSocket运行流程图

数据流1由设备端向平台web端主动发起数据请求,web平台在进行数据响应数据流1的数据后将状态上报接口时告知数据流2是否已经进行了数据连接,如果需要进行数据请求的话,那设备就会发起WebSocket数据长连接请求,进行如上的WebSocket运行流程过程。如果需要的话,那么设备端就可以发起请求,创建一个WebSocket的控制流通道,所以作为命令交互相互使用。数据流2可以由平台通过控制流通道线设备发送命令创建。

数据格式

http数据格式要求

http请求报文中通常包含请求行(requestline)、请求头(header)、空行、和请求数据(请求实体)这是个部分组成的,响应报文包含状态行、消息报头、空行、响应正文四样。

2345_image_file_copy_183.jpg

http协议对http交互中的请求行(接口地址)和请求数据/响应正文进行定义,约定请求数据和响应正文需要严格的json数据格式。

请求数据格式:

{
"id":"你写的东西",
"sessionId":"你要写的授权token",
"command":"你要请求命令(需要执行的动作)",
"params":{具体接口参数定义}
}

说明:

以上http所涉及到的所有请求接口都要必须遵循的格式定义,即所有http接口传输的请求数据都必须包含以上定义内容;

以上定义的请求数据统称“参数头”,具体赋值根据具体接口的要求进行组织;

“参数头”内params的值统称“参数体”,内容根据不同的接口具体定义不同,如“参数头”内需传输二进制内容,则需要先转为base64。

调用要求

1、http头必须设置Content-Type并取值application/json;

2、http必须post形式提交;

3、接口请求/响应实体放入http-body提交;

4、接口请求/响应实体使用标准json数据格式;

5、接口请求/响应实体必须按约定格式组织;

6、接口请求实体中参数体params赋值必须按接口约定赋值;

7、接口请求/响应实体统一使用UTF-8字符集。

响应代码定义表

响应代码定义表

image.png

image.png

WebSocket数据格式

Websocket是为了实现设备或浏览器(客户端)和平台(服务器)之间的高效双向全双工通信,连接建立后主要用于服务器主动向客户端推送命令进行实时远程控制(包括升级)。

WebSocket协议中最小的通信单位是帧,一帧中包含标识、操作代码、掩码、数据、数据长度和数据组成,数据部分可以由操作代码表明是文本还是二进制。

2345_image_file_copy_184.jpg

二进制帧请求格式

2345_image_file_copy_185.jpg

2345_image_file_copy_186.jpg

说明:

  1. 每一次数据发送,都采用固定12字节的头信息+消息体+数据体进行发送;
  2. 接收亦同,先接收12个字节头信息,根据头信息获取接下来的消息体和数据体;
  3. 其中消息体一般为JSON,协议格式同样的文本数据帧格式,数据体一般为二进制数据(图或文件);
  4. 发送和接收异步进行。

数据流http接口定义

接口参数(这里以控制流WebSocket的接口为例)

请求头

image.png

实例

{
"id":"0803502895724DBD9C49CA58C7D7DCC2",
"command":"GetParam",
"params":{}
}


相关文章
|
10天前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
125 1
|
16天前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
100 3
|
9天前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
96 0
|
1月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
1月前
|
消息中间件 缓存 前端开发
从资损百万到零事故:Java 接口幂等设计的艺术与实践
在分布式系统中,重复请求常引发严重资损,如支付双扣、库存超卖等问题,其根源在于接口缺乏幂等性设计。本文通过真实案例揭示幂等性的重要性,并详解8种主流解决方案,涵盖唯一请求ID、乐观锁、悲观锁、状态机等,帮助开发者构建稳定系统,保障业务一致性。无论你是架构师还是开发工程师,都能从中获得实战指导,有效规避重复调用带来的风险。
137 0
|
1月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践
|
1月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
312 63
|
22天前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
56 16
|
1月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
143 23
|
1月前
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
116 12