前后端交互接口(一)

devtools/2024/11/13 8:51:42/

前后端交互接口(一)

前言

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

后续的规划

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

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

那么在我们开发客户端阶段,我们会通过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.ppmy.cn/devtools/133352.html

相关文章

Linux I/O编程:I/O多路复用与异步 I/O对比

文章目录 0. 引言1. I/O 模型简介1.1 阻塞 I/O(Blocking I/O)1.2 非阻塞 I/O(Non-Blocking I/O)1.3 信号驱动式 I/O(Signal-Driven I/O)1.4 多路复用 I/O(I/O Multiplexing)1.5 异步…

电脑不显示wifi列表怎么办?电脑不显示WiF列表的解决办法

有用户会遇到电脑总是不显示wifi列表的问题,但是不知道要怎么解决。随着无线网络的普及和使用,电脑无法显示WiFi列表的问题有时会让人感到困扰。电脑不显示WiFi列表是很常见的问题,但这并不意味着你无法连接到网络。不用担心,这个…

『Django』APIView基于类的用法

点赞 关注 收藏 学会了 本文简介 上一篇文章介绍了如何使用APIView创建各种请求方法,介绍的是通过函数的方式写接口。 本文要介绍 Django 提供的基于类(Class)来实现的 APIView 用法,代码写起来更简单。 APIView基于类的基…

【网络安全 | 身份授权】一文讲清OAuth

未经许可,不得转载。 文章目录 问题背景名词定义OAuth设计理念OAuth运行流程OAuth 2.0 客户端的授权模式授权码模式授权码模式的流程流程详细解析简化模式简化模式的流程密码模式客户端模式更新令牌令牌与密码的区别总结问题背景 OAuth 2.0 是一种开放的授权框架,用于在用户…

python在word中插入图片

本文讲解python如何在word文档中插入图片,以及指定插入图片的段落。 1、在新建的word文档中插入图片 import win32com.client as win32 from win32com.client import constants # 1)打开word应用程序 doc_app win32.gencache.EnsureDispatch(Word.App…

【人工智能】利用大语言模型(LLM)实现机器学习模型选择与实验的自动化

文章目录 引言环境准备数据集说明 项目结构主要文件说明 导入必要的软件包软件包功能简述 辅助函数定义加载配置文件加载数据集预处理数据集函数功能详解 集成LLM进行模型选择调用LLM的函数定义函数功能详解 清理和验证LLM的输出清理超参数建议提取模型名称验证超参数修正超参数…

Qt_day7_文件IO

目录 文件IO 1. QFileDialog 文件对话框(熟悉) 2. QFileInfo 文件信息类(熟悉) 3. QFile 文件读写类(掌握) 4. UI操作与耗时操作(掌握) 5. 多线程(掌握)…

C#界面设计

C#界面设计通常指的是使用C#编程语言及其相关的图形用户界面(GUI)框架(如Windows Forms、WPF(Windows Presentation Foundation)或Uno Platform等)来创建应用程序的用户界面。以下是一些关于C#界面设计的基…