前后端交互接口(一)

前后端交互接口(一)

前言

在上一集我们就完成了全局通知窗口的功能,这一集开始我们也要开始讲讲前后端交互接口这件事情,以及谈谈客户端和服务端开发的一些事情。

后续的规划

我们会先完成整个客户端才开始接入服务端的内容。

那么我们在完成业务逻辑的时候还是需要搭配服务器的。这个怎么解决?

那么在我们开发客户端阶段,我们会通过Qt内置的网络编程模块,搭建一个“测试用服务器”,也就是我们所说的MockServer。

我们在后续的某些功能点,都是需要以以下流程进行。

客户端    ----     测试服务器   ----    测试

在实际开发的时候,我们通常是分为两个团队,一个是负责客户端、另一个是负责服务端。

我们在开发的时候,不可能开发了一个内容需要另一个团队的配合的接口就去等对方,这个是效率很低的一个方式,所以我们在开发的时候一般都会在自己的那一方,比如客户端方,做一个功能精简的测试服务器。在开发的最后,我们再进行联调。

前后端交互接口约定

为了完成我们各种业务逻辑,能够让客户端与服务端之间正常的交互通信,我们就需要约定“前后端交互接口”。

我们也需要规定,客户端能够发送哪些请求,服务端返回的相应是怎么样的。

我们这也是在自定义应用层协议。

那么我们这里先给出三条约定!!!

客户端与服务端的通信协议

我们使用HTTP以及Websocket这两个协议。

HTTP协议想必大家都不陌生,是一个一问一答的通信协议,他需要让客户端对服务端发送请求,之后服务端返回相应的响应。但是HTTP不能够主动给客户端推送消息,所以我们就要引入另一个协议----Websocket

Websocket也是一个知名的应用层协议,我们将会在接下来的编程当中使用它来解决我们无法直接使用HTTP让服务端主动推送消息给客户端的难题。

那么我们还是举个栗子吧,我们什么时候会需要使用到服务端主动推送消息呢?

比如,我给我的同学发送消息,这里虽然说看上去只有我们两个连接了,其实中间是还有我们之间和服务端之间的联系,那么我们主动发送信息给客户端,这里是没有任何问题的,但是信息要通过服务端传递给我的同学,我们就需要服务端主动推送信息,这时就要用到我们的Websocket这个协议了。

HTTP请求与响应、数据格式约定

我们在使用HTTP协议的时候,我们程序员需要考虑客户端发送的HTTP的请求应该有什么约定,服务端的响应又应该有什么约定,我们这里的约定是约定的我们的方法、路径、body之类的内容。这都是我们HTTP协议相关的内容,建议小伙伴们先详细学习HTTP协议再继续看。


我们规定客户端发送的所有的请求我们一律使用POST方法,暂时不使用GET方法。我们需要给服务端传输的数据也一律通过body进行传输,不使用query string的方式。我们的不同的功能点用到的请求也是通过不同的路径进行区分即可。服务端返回的数据,我们也是使用body来返回!!!

有人可能要问了,为什么不使用RESTful编程架构?我们不能使用RESTful编程架构吗?

答案是我认为这个项目可以暂时不使用,而且RESTful编程架构是一个很好的设计风格,在这个项目中也可以去使用,C++社区里面也是提供了多个库和框架支持RESTful API的开发。

好处也很多!!!易于开发、可拓展性、松耦合性等。

使用Protobuf序列化/反序列化

那么进一步,我们也约定我们的HTTP的请求与响应,body部分统一使用我们的Protobuf来进行序列化和反序列化!!!

Protobuf(Protocol Buffers)是一种由Google开发的二进制序列化格式和相关的技术,它用于高效地序列化和反序列化结构化数据,通常用于网络通信、数据存储等场景。

可能又有人要问了,为什么我们不使用JSON,不使用XML,不使用YML?

我们写C++的那批人都有一个追求,就是提高效率。

对比JSON

在性能上,我们的Protobuf的序列化与反序列化的速度都是明显优于JSON的,Protobuf使用预定义的Schema解析二进制数据,避免了运行时的类型推断开销,从而在性能上具有明显优势。Protobuf的编码解码性能比JSON高出2-4倍,且内存占用只有JSON的一半。

由于Protobuf编码成二进制,破解成本增大,相对于XML和JSON来说更加安全。

那么我们的这一集就先到这里。

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

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

相关文章

HT7182 21V,14A高效升压转换器

1、特征 输入电压范围:2.7V-21V 输出电压范围:最高21V 固定开关频率:350kHz 可编程峰值电流:最高14A 高转换效率 95% (PVIN 12V, VOUT20V, IOUT 2A) 94% (PVIN 12V, VOUT20V, IOUT 4.5A) 93% (PVIN 7.2V, VOUT12V, IOUT 1.5A) 90% (PVIN 7.2V, VOUT12V, IOUT 5A) 96% (PVI…

【SNTP】Simple Network Time Protocol

SNTP(Simple Network Time Protocol)客户端是一种用于从时间服务器获取网络时间的应用程序或设备。SNTP是一种基于UDP的协议,它用于同步计算机和设备的本地时间与网络中的标准时间。 SNTP客户端通常用于以下情况: 时间同步&#…

python中对字典的遍历

python中,对字典的遍历很有用,平常编程中可能经常会用到。下面是几种常用的方法。 1. for循环遍历 stu_info = {"name": lily, "age": 18, "height": 170, "weight": 50}# 遍历方法1 for i in stu_info: # 这种其实是遍历键print…

解析Eureka的架构

1. 引言 1.1 Eureka的定义与背景 Eureka是由Netflix开发的一个RESTful服务,用于服务发现。它是微服务架构中的一个核心组件,主要用于管理服务的注册和发现。Eureka允许服务提供者注册自己的服务信息,同时也允许服务消费者查询可用的服务&am…

《野狗子:裂头怪》角色升级注意事项分享

《野狗子:裂头怪》中的角色升级是游戏里非常重要的事情,不过升级需要注意的事情就是如果你找到一个自己喜欢的角色,我们强烈建议你查看他们的所有被动技能,并尽早解锁一些! 野狗子裂头怪角色升级需要注意什么 在《野狗子 Slitter…

大语言模型训练的全过程:预训练、微调、RLHF

一、 大语言模型的训练过程 预训练阶段:PT(Pre training)。使用公开数据经过预训练得到预训练模型,预训练模型具备语言的初步理解;训练周期比较长;微调阶段1:SFT(指令微调/有监督微调…

Audio-Language Models

根据最新的搜索结果,以下是一些表现最好的Audio-Language Models: Qwen-Audio:这是一个突破性的音频理解多模态模型,能够跨越30种任务和8种语言,效果超出预期。Qwen-Audio结合了音频和文本输入,将Qwen-7B语…

【linux学习2】linux基本命令行操作总结

系列文章目录 【linux学习1】原理以及应用 文章目录 系列文章目录前言Linux命令行操作-目录Linux命令行操作-关机Linux命令行操作-磁盘管理Linux命令行操作-文件管理Linux命令行操作-系统设置 前言 下面是参考资料: 菜鸟编程教程-Linux Linux命令大全 Linux命令行…

MySQL中,GROUP BY 分组函数

文章目录 示例查询:按性别分组统计每组信息示例查询:按性别分组显示详细信息示例查询:按性别分组并计算平均年龄,如果你还想统计每个性别的平均年龄,可以结合AVG()函数:说明 示例查询:按性别分组统计每组信…

兰空图床配置域名访问

图床已经创建完毕并且可以访问了,但是使用IP地址多少还是差点意思,而且不方便记忆,而NAT模式又没法直接像普通服务器一样DNS解析完就可以访问。 尝试了很多办法,nginx配置了半天也没配好,索性直接重定向,反…

数据分析师职业规划——数据分析师的职业焦虑与未来发展

身边的数据分析师经常有一种职业焦虑和怠倦感,尤其是三十岁左右的数据分析师。为什么会有这种感觉呢?怎样才能避免这种职业焦虑? 一、 数据分析师的打杂困惑 数据分析师的职业焦虑和怠倦来源于打杂困惑:做的事情都是打杂&#x…

Java智慧养老养老护理帮忙代办陪诊陪护平台系统小程序源码

🌟 智慧养老新时代:养老护理、帮忙代办、陪诊陪护平台系统全解析 🏡 👵 引言:智慧养老,让爱无距离 随着科技的飞速发展,智慧养老已成为新时代老年人的新选择。通过养老护理、帮忙代办、陪诊陪护…

OpenCV视觉分析之目标跟踪(8)目标跟踪函数CamShift()使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 找到物体的中心、大小和方向。 CamShift(Continuously Adaptive Mean Shift)是 OpenCV 中的一种目标跟踪算法&#xff0…

vue-svg-icon的安装和使用

vue-svg-icon 是一个用于在 Vue.js 项目中轻松使用 SVG 图标的库。以下是安装和使用 vue-svg-icon 的步骤,包括 Vue 2 和 Vue 3 的配置。 可以结合 iconfont 图标库使用 安装 vue-svg-icon 首先,确保你已经安装了 vue-svg-icon。你可以使用 npm 或 ya…

论文1—《基于卷积神经网络的手术机器人控制系统设计》文献阅读分析报告

论文报告:基于卷积神经网络的手术机器人控制系统设计 摘要 本研究针对传统手术机器人控制系统精准度不足的问题,提出了一种基于卷积神经网络的手术机器人控制系统设计。研究设计了控制系统的总体结构,并选用PCI插槽上直接内插CAN适配卡作为上…

Windows11下将某个程序添加到鼠标右键快捷菜单

经常看log,最喜欢用的txt查看和编辑工具是EditPlus,好像是个韩国软件,最大的优势是打开大文件,好几G的log文件也很轻松,速度快,然后还有各种高亮设置查找文件等,非常方便。但是不知道为什么&…

无人机影像处理系统技术选型

无人机功能:3D点云分析;DEM显示 一、CSharpGL 计算机图形学是一门将三维空间下的图形映射到计算机栅格屏幕的学科,广泛应用于游戏、虚拟现实等需要三维图形可视化的领域。OpenGL和DirectX是业内公认的标准化计算机图形学库,相较…

aardio 5分钟多线程开发简单入门

废话不多说 直接开干! 借用作者话说 虽然 aardio 的多线程开发非常简单,但是: 1、请先了解:「多线程」开发比「单线程」开发更复杂这个残酷的现实。 2、请先了解: aardio 这样的动态语言可以实现真多线程非常罕见。 建议先找任意的编程语言试…

一个基于Nodejs的快速、简洁且高效的静态博客框架

大家好,今天给大家分享一个基于Node.js的静态博客框架Hexo,它以其快速、简洁且强大的特点,成为搭建个人博客的优选工具。 项目介绍 Hexo 是一个快速、简洁且高效的博客框架。 Hexo 使用 Markdown(或其他标记语言)解析…

c++基础12比较/逻辑运算符

比较/逻辑运算符 布尔比较运算符逻辑运算符位运算符&#xff08;也用于逻辑运算&#xff09;1<a<10怎么表达T140399判断是否为两位数代码 布尔 在C中&#xff0c;布尔类型是一种基本数据类型&#xff0c;用于表示逻辑值&#xff0c;即真&#xff08;true&#xff09;或假…