前后端交互接口(一)

前后端交互接口(一)

前言

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

后续的规划

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

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

那么在我们开发客户端阶段,我们会通过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…

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

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

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

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

MySQL中,GROUP BY 分组函数

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

兰空图床配置域名访问

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

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

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

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

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

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

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

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

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

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

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

拍立淘API:当购物遇上“读图写话”

在这个看脸的时代,拍立淘API就像是那个总能猜中你心思的“读图写话”高手,你给它一张图,它就能给你一篇购物清单。这项技术就像是魔法,把图片里的商品变到你眼前。本文将带你一起走进这个魔法世界,看看拍立淘API是如何…

天云数据战略签约浪潮 成为浪潮智慧城市银河联盟2024优秀战略合作伙伴

3月29日,浪潮智慧城市银河联盟2024生态伙伴大会正式举办,来自全国各地的行业专家、技术大咖、生态伙伴齐聚一堂,共谋智慧城市新质生产力,助力构筑智慧便民的数字社会新图景。天云数据战略签约浪潮,成为浪潮智慧城市银河联盟2024生态伙伴。 济…

MySQL数据库面试题(下)

视图 为什么要使用视图?什么是视图? 为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性。所谓视图,本质上是一种虚拟表,在物理上是不存在的,其内容与真实的表相似&#xf…

【p2p、分布式,区块链笔记 Torrent】WebTorrent 的lt_donthave插件

扩展实现 https://github.com/webtorrent/lt_donthave/blob/master/index.js /*! lt_donthave. MIT License. WebTorrent LLC <https://webtorrent.io/opensource> */// 导入所需模块 import arrayRemove from unordered-array-remove // 用于从数组中删除元素的函数 i…

NVR小程序接入平台/设备EasyNVR多品牌NVR管理工具/设备汇聚公共资源场景方案全析

随着信息技术的飞速发展&#xff0c;视频监控已经成为现代社会安全管理和业务运营不可或缺的一部分。特别是在公共资源管理方面&#xff0c;视频监控的应用日益广泛&#xff0c;涵盖了智慧城市、智能交通、大型企业以及校园安防等多个领域。NVR小程序接入平台EasyNVR作为一款功…

C/C++使用AddressSanitizer检测内存错误

AddressSanitizer 是一种内存错误检测工具&#xff0c;编译时添加 -fsanitizeaddress 选项可以在运行时检测出非法内存访问&#xff0c;当发生段错误时&#xff0c;AddressSanitizer 会输出详细的错误报告&#xff0c;包括出错位置的代码行号和调用栈&#xff0c;有助于快速定位…

contenteditable实现需要一个像文本域一样的可编辑框

我这里是因为左上和右下有一个固定的模板&#xff0c;所有用textarea有点不方便&#xff0c;查了下还有一个方法可以解决就是在需要编辑的元素上加上 :contenteditable"true" 完整代码如下&#xff0c;因为这个弹窗是两用的&#xff0c;所以用messageType做了一下判…

QML项目实战:自定义Switch按钮

目录 一.添加模块 1.QtQuick.Controls 2.1 2.QtGraphicalEffects 1.12 二.自定义Switch 三.标签 四.效果 五.代码 一.添加模块 1.QtQuick.Controls 2.1 QtQuick.Controls 提供了一组预定义的 UI 控件&#xff0c;这些控件可以用于构建现代、响应式的用户界面。它包括按…

【数据集】【YOLO】【目标检测】电动车佩戴头盔检测数据集 5448 张,YOLO/VOC格式标注!

数据集介绍 【数据集】电动车头盔检测数据集 5448 张&#xff0c;目标检测&#xff0c;包含YOLO/VOC格式标注。数据集中包含3种分类&#xff0c;包含两轮电动车、戴头盔、不戴头盔。数据集来自国内外监控摄像头截图。检测范围电动车、摩托车、双轮非自行车。 一、数据概述 佩戴…

秃姐学AI系列之:GRU——门控循环单元 | LSTM——长短期记忆网络

RNN存在的问题 因为RNN模型的BPTT反向传导的链式求导&#xff0c;导致需要反复乘以一个也就是说会出现指数级别的问题&#xff1a; 梯度爆炸&#xff1a;如果的话&#xff0c;那么连乘的结果可能会快速增长&#xff0c;导致梯度爆炸梯度消失&#xff1a;如果的话&#xff0c;…